it-swarm.com.de

So legen Sie den Statusleistenstil in Swift fest

Ich verwende Xcode 8.0 Beta 4.

In der vorherigen Version hat UIViewController eine Methode zum Festlegen des Statusleistenstils

public func preferredStatusBarStyle() -> UIStatusBarStyle

Ich fand jedoch, dass es in Swift 3 in "Get ONLY varaiable" geändert wurde. 

public var preferredStatusBarStyle: UIStatusBarStyle { get } 

Wie kann der Stil bereitgestellt werden, der in meinem UIViewController verwendet werden kann?

150
Willjay

Dies ist die bevorzugte Methode für iOS 7 und höher.

Setzen Sie in Info.plist Ihrer Anwendung die Option "Controller-basierte Statusleiste anzeigen" auf YES.

Überschreibe preferredStatusBarStyle in jedem deiner View-Controller . Zum Beispiel:

override var preferredStatusBarStyle: UIStatusBarStyle {     
      return .lightContent
}

Wenn preferredStatusBarStyle einen anderen bevorzugten Statusleistenstil zurückgibt, der auf etwas basiert, das sich innerhalb Ihres View-Controllers ändert (z. B. ob die Bildlaufposition oder ein angezeigtes Bild dunkel ist), möchten Sie setNeedsStatusBarAppearanceUpdate() aufrufen, wenn sich dieser Zustand ändert.

Wenn Sie einen Navigationscontroller verwenden und den bevorzugten Statusleistenstil jedes Ansichtscontrollers verwenden möchten, finden Sie weitere Informationen unter https://stackoverflow.com/a/41026726/1589422 .

iOS vor Version 7, veraltete Methode

Apple hat dies veraltet , daher wird es in Zukunft entfernt. Verwenden Sie die obige Methode, damit Sie sie nicht erneut schreiben müssen, wenn die nächste iOS-Version veröffentlicht wird.

Wenn Ihre Anwendung unterstützt wird In Info.plist Ihrer Anwendung setzen Sie "Anzeige der Controller-basierten Statusleiste anzeigen" auf NEIN.

Fügen Sie in appDelegate.Swift, der didFinishLaunchingWithOptions-Funktion Folgendes hinzu:

UIApplication.shared.statusBarStyle = .lightContent
426
PRAVEEN

Sie können versuchen, den zurückgegebenen Wert zu überschreiben, anstatt ihn festzulegen. Die Methode ist als {get} deklariert. Geben Sie einfach einen Getter an:

 override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Wenn Sie dies bedingt festlegen, müssen Sie setNeedsStatusBarAppearanceUpdate() aufrufen, damit die Änderung animiert wird, wenn Sie bereit sind

126
Abizern

Letztes Update (Xcode 10+/Swift 4.2+)

Dieser Artikel ist für alle unangetastet, die die Logik der verschiedenen Ansätze der vergangenen Jahre verstehen möchten. Inzwischen ist ab Xcode 10, Swift 4.2erste Annäherung veraltet und wird nicht mehr unterstützt (dh wird nicht, wenn Sie dies versuchen beschäftige es). Es wird immer noch zu Ihrer Information herangezogen, um die Gründe für Plist.info-Flag und die Anpassungspraxis besser zu verstehen.

Wichtige Klarstellung

Es ist sehr wichtig, zwei Ansätze zum Anpassen der Darstellung der Statusleiste zu kennen. Sie sind verschieden und sollten nicht gemischt werden.

Erster Ansatz - eine Farbe für die gesamte App (DEPRECATED seit iOS7)

In info.plist finden Sie einen Schlüssel oder erstellen diesen

View controller-based status bar appearance

und setzen Sie es auf NO.

Was es macht? Im Wesentlichen wird eine Einstellung festgelegt, die besagt, dass in Ihrer Anwendung die Statusleiste wird nicht von jedem Ansichtscontroller individuell definiert wird. Das ist sehr wichtig zu verstehen. Dies bedeutet, dass Sie für die gesamte App eine einheitliche Einstellung für alle Bildschirme haben. Es gibt zwei Einstellungen: default (schwarzer Text auf weißem Hintergrund) oder lightContent (weißer Text auf schwarzem Hintergrund). 

So richten Sie eine dieser Einstellungen ein (eine Einstellung für alle Bildschirme):

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    application.statusBarStyle = .lightContent // .default
    return true
}

Auf diese Weise müssen Sie diese Einstellung nicht für jeden Ansichts-Controller erneut vornehmen. Sie können jedoch immer auf diese Methode zurückgreifen, um das Aussehen freiwillig zu ändern.

Zweiter Ansatz - individuelle Farbe für jeden Ansichts-Controller

Das ist das Gegenteil. Damit es funktioniert, fahren Sie mit info.plist fort und setzen Sie die Einstellungen

View controller-based status bar appearance

zu JA

Wenn ein neuer View-Controller geöffnet wird, wird der Statusleistenstil individuell festgelegt, wenn Sie diese Implementierung in jede UIViewController-Instanz einfügen, die Sie benötigen:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent // .default
}

Sie haben dasselbe wie im ersten Modus. Sie können entweder einen dunklen oder einen hellen Stil für die Statusleiste festlegen, und zwar für jeden Ansichts-Controller.

Dritter Ansatz - Hack!

Es gibt einen Hack, mit dem direkt auf die Statusleiste zugegriffen werden kann: 

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
        statusBar.backgroundColor = UIColor.blue
    }

    return true
}

Warum hacken? Wenn Sie eine andere Statusleiste als Schwarz oder Weiß benötigen, verwenden Sie eine undokumentierte API. Sie erhalten ein statusBar-Objekt mit KVC und legen die Hintergrundfarbe fest. Das Objekt, das Sie auf diese Weise erhalten, ist UIStatusBar, das von UIView abgeleitet ist und daher natürlich die backgroundColor-Eigenschaft unterstützt. Dies ist ein schmutziger, nicht legaler Weg, aber bisher ist dies die einzige Möglichkeit, eine benutzerdefinierte Farbe für die Statusleiste einzurichten (wobei der UINavigationBar-Ansatz nicht berücksichtigt wird, wodurch die Darstellung der Navbar + Statusleiste insgesamt angepasst werden kann). Dies kann dazu führen, dass Ihre App abgelehnt wird. Aber vielleicht hast du Glück. Wenn Sie sich jedoch in bestimmten komplexen Situationen befinden (z. B. Hierarchie verschachtelter, untergeordneter Navigations- und Ansichtscontroller), ist dies möglicherweise die einzige oder zumindest die weniger problematische Möglichkeit, das Aussehen der Statusleiste anzupassen (beispielsweise, um sie transparent zu machen).

Xcode 10+, Swift 4.2

Es gibt keine Alternativen mehr: Der Entwickler sollte each view controller das Aussehen der Statusleiste definieren, indem er das Flag auf YES setzt (oder diese Aktion weglässt, da es standardmäßig YES ist) und Befolgen Sie die obigen Anweisungen.


Bonus

Hack-basierte Lösung, die Sie (wenn auch nicht empfohlen) in komplexen Situationen verwenden möchten, um das Statusbar-Erscheinungsbild jederzeit freiwillig zu ändern. Farblich gesehen macht die folgende Erweiterungsmethode genau das, was Sie mit einem regulären Ansatz hätten tun können. Sie können es an Ihre Bedürfnisse anpassen.

extension UIViewController {
    func setStatusBarStyle(_ style: UIStatusBarStyle) {
        if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
            statusBar.backgroundColor = style == .lightContent ? UIColor.black : .white
            statusBar.setValue(style == .lightContent ? UIColor.white : .black, forKey: "foregroundColor")
        }
    }
}
111
Hexfire

Swift 3 & 4, iOS 10 & 11, Xcode 9 & 10
Für mich funktioniert diese Methode nicht:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

wenn ich an jeden View Controller gewöhnt bin, aber das hat funktioniert:

  • Fügen Sie in der Datei info.list die Zeile: View controller-based status bar appearance hinzu und setzen Sie sie auf NO.

  • Nächstes in appdelegate: 

    UIApplication.shared.statusBarStyle = .lightContent
    
95
Gracu

Sie müssen den folgenden Schlüssel in Ihrer Info.plist-Datei hinzufügen:

View controller-based status bar appearancemit booleschem Wert aufNO

In Ihrer appdelegate-Klasse vor der Rückgabe in der didFinishLaunchingWithOptions-Methode.

let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to:#selector(setter: UIView.backgroundColor)) {
    statusBar.backgroundColor = UIColor.red
}
UIApplication.shared.statusBarStyle = .lightContent

Ändern Sie backgroundColor und statusBarStyle je nach Anforderung.

25
Himanshu padia

Wenn Sie die Farbe der statusBar in Weiß ändern möchten, fügen Sie für alle in einer UINavigationController enthaltenen Ansichten diese in AppDelegate hinzu:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    UINavigationBar.appearance().barStyle = .blackOpaque
    return true
}

Dieser Code:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

nicht arbeitet für UIViewControllers, die in einer UINavigationController enthalten sind, da der Compiler nach der statusBarStyle der UINavigationController sucht, nicht nach der statusBarStyle der darin enthaltenen ViewControllers.

Hoffe, das hilft denen, die mit der akzeptierten Antwort nicht erfolgreich waren!

Wenn Sie die Statusleiste nach dem Anzeigen der Ansicht jederzeit ändern möchten, können Sie Folgendes verwenden:

  • Fügen Sie in der Datei info.list die Zeile hinzu: Anzeige der Controller-basierten Statusleiste und setzen Sie sie aufYES 

    var viewIsDark = Bool()
    
    func makeViewDark() {
    
        viewIsDark = true
        setNeedsStatusBarAppearanceUpdate()
    }
    
    func makeViewLight() {
    
        viewIsDark = false
        setNeedsStatusBarAppearanceUpdate()
    }
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
    
        if viewIsDark {
            return .lightContent 
        } else {
            return .default 
        } 
    }
    
22

Sie können dies auch im Storyboard tun

  1. Erstellen Sie in info.plist einen neuen Eintrag. "Controller-basierte Statusleiste anzeigen" auf "JA" setzen.
  2. Gehen Sie zu Ihrem Storyboard und wählen Sie den Navigationscontroller aus, den Sie ändern möchten. Klicken Sie im Storyboard-Dokumentgliederungsabschnitt (linkes Bedienfeld im Storyboard) auf die Navigationsleiste. 
  3. Gehen Sie zum rechten Bereich und klicken Sie auf den Attributabschnitt
  4. Unter der Navigationsleiste sehen Sie den Stil. Wählen Sie den gewünschten Stil aus (Standardeinstellung ist Schwarz und Schwarz ist Weiß).

Sie müssen dies für jeden Navigations-Controller tun, den Sie haben. Alle Ansichten unter diesem Navigationscontroller ändern jedoch den Stil/die Farbe der Statusleisten in der Ansicht in den gerade ausgewählten Bereich. Ich finde diese Option besser, weil Sie Ihre Ergebnisse sofort sehen können und nicht in jedem Ansichts-Controller zusätzliche Codezeilen hinzufügen müssen. 

 enter image description here

(Erledigt mit Xcode 8.3.3 in einem Alles-Swift-Projekt)

12
Bryan Norden

Als ersten Schritt müssen Sie eine Zeile mit dem Schlüssel hinzufügen: View controller-based status bar appearance und dem Wert NO zur Info.plist-Datei. Fügen Sie anschließend zwei Funktionen in Ihrem Controller hinzu, die nur den Controller betreffen: 

override func viewWillAppear(_ animated: Bool) {
       super.viewWillAppear(animated)
       UIApplication.shared.statusBarStyle = .lightContent
}

override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        UIApplication.shared.statusBarStyle = .default    
}
8
javimuu

Swift 3

Fügen Sie in Info.plist eine Zeile mit dem Namen "Darstellung der Controller-Statusleiste anzeigen" hinzu, und legen Sie deren Wert auf No fest.

class YourViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.shared.statusBarStyle = .lightContent //or .default
        setNeedsStatusBarAppearanceUpdate()

    }

}
6
youareawaitress

Es scheint ein kleines Problem bezüglich der Textfarbe der Statusleiste bei Navigationsleisten zu geben.

Wenn Sie möchten, dass der Eintrag .plist View-Controller-basierte Statusleiste auf YES gesetzt wird, funktioniert er manchmal nicht, wenn Sie eine farbige Navigationsleiste haben.

Zum Beispiel:

override func viewWillAppear(_ animated: Bool) {
    let nav = self.navigationController?.navigationBar
    nav?.barTintColor = .red
    nav?.tintColor = .white
    nav?.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    setNeedsStatusBarAppearanceUpdate()
}

und

override var preferredStatusBarStyle: UIStatusBarStyle {return .lightContent}

Der obige Code funktioniert nicht, auch wenn Sie Folgendes in AppDelegate festgelegt haben:

UIApplication.shared.statusBarStyle = .lightContent

Für diejenigen, die immer noch Probleme haben, beurteilt es offenbar irgendwie, ob die Statusleiste durch die Stile in der Navigationsleiste hell oder dunkel sein muss. So konnte ich das Problem beheben, indem ich in viewWillAppear die folgende Zeile hinzufügte:

nav?.barStyle = UIBarStyle.black

Wenn der Balkenstil schwarz ist, wird Ihre überschriebene Variable abgehört. Hoffe das hilft jemandem :)

5
nCr78

Xcode 8.3.1, Swift 3.1

  1. Erstellen Sie einen neuen Eintrag in der Datei "info.plist". "Controller-basierte Statusleiste anzeigen" auf "NEIN" setzen.

  2. Öffnen Sie AppDelegate.Swift und fügen Sie diese Zeilen in der Methode "didFinishLaunchingWithOptions" hinzu:

application.statusBarStyle = .lightContent

5
joemalski

Swift 4.0 Verwenden Sie diesen Code in der Klasse "didFinishLaunchingWithOptions launchOptions:"

UIApplication.shared.statusBarStyle = .lightContent
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to: #selector(setter: UIView.backgroundColor)){
  statusBar.backgroundColor = UIColor.black
}
4
Karthickkck

Hier ist Apple-Richtlinien/Anweisungen über den Statusleistenstil.

Wenn Sie den Statusleistenstil, die Anwendungsebene festlegen möchten, setzen Sie UIViewControllerBasedStatusBarAppearance in der .plist-Datei auf NO. Und in Ihrem appdelegate> didFinishLaunchingWithOptions folgendes Ine hinzufügen (programmgesteuert können Sie dies vom App-Delegaten aus tun).

Ziel c 

[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

Swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    application.statusBarStyle = .lightContent
    return true
}

wenn Sie den Statusleistenstil festlegen möchten, führen Sie auf Ansichtssteuerungsebene die folgenden Schritte aus:

  1. Setzen Sie UIViewControllerBasedStatusBarAppearance in der .plist-Datei auf YES, wenn Sie den Statusleistenstil nur auf UIViewController-Ebene festlegen müssen. 
  2. In der ViewDidLoad-Add-Funktion - setNeedsStatusBarAppearanceUpdate

  3. Überschreiben Sie preferredStatusBarStyle in Ihrem View-Controller.

Ziel c

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setNeedsStatusBarAppearanceUpdate];
}

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

Swift

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Legen Sie den Wert für .plist gemäß der Einstellungsebene für die Statusleiste fest.

enter image description here

4
Krunal
override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Das hat für mich funktioniert :) Ich habe einen Navigations-Controller in meine Ansichts-Controller mit ausgeblendeter Navigationsleiste integriert. Ich wollte die Statusleiste für einige Ansichten in der App aktivieren.

3

Swift 3

wenn Ansicht Controller-basierte Statusleiste in Info.plist = YES

verwenden Sie dann diese Erweiterung für alle NavigationController

    extension UINavigationController
    {
        override open var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
         }
     }

wenn kein UINavigationController vorhanden ist und nur UIViewController vorhanden ist, dann folgenden Code verwenden:

    extension UIViewController
    {
        override open var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
         }
     }
3
Datt Patel

Das hat bei mir funktioniert

Setzen Sie View controller-based status bar Erscheinung inNOin plist und fügen Sie in UIViewControllerviewDidAppear die folgende Zeile hinzu 

UIApplication.shared.setStatusBarStyle(UIStatusBarStyle.lightContent, animated: true)
3
Anshad Rasheed

Für Benutzer, die die Statusleiste für alle Viewcontroller auf: iOS 11 ändern möchten, ist die Swfit 4-Lösung ziemlich einfach.

1) Info.plist hinzufügen: 

Anzeige der Controller-basierten Statusleiste -> NO

2) Linke Seite des XCode-Slect-Projekts> Ziele > Wählen Sie Ihr Projekt> Unter Allgemein> Informationen zur Bereitstellung> Statusleistenstil auswählen: Licht

Wenn Sie die Statusleiste nur für one viewcontroller ändern möchten, fügen Sie bei viewDidLoad Folgendes hinzu:

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}
3
Doca

Swift 4+

für weißen Statusleistentext:

navigationController.navigationBar.barStyle = .blackTranslucent
2
Alfi

Sie können eine bool-Eigenschaft mit dem Namen "shouldStatusBarDark" verwenden, um die Farbe der Statusleiste umzuschalten. Sie können auch den Wert aktualisieren, um die Farbe der Statusleiste beim Scrollen zu ändern.

 var shouldStatusBarDark = false {
     didSet {
         setNeedsStatusBarAppearanceUpdate()
     }
 }

 override var preferredStatusBarStyle: UIStatusBarStyle {
     return shouldStatusBarDark ? .default : .lightContent
 }

 func scrollViewDidScroll(_ scrollView: UIScrollView) {
     let offSetY = scrollView.contentOffset.y
     if offSetY > 50 {
         UIView.animate(withDuration: 0.4, animations: {
             self.navView.alpha = 1
             self.shouldStatusBarDark = true
         })
     } else {
         UIView.animate(withDuration: 0.4, animations: {
             self.navView.alpha = 0
             self.shouldStatusBarDark = false
         })
     }
 }
2
tiantong

Die meisten dieser Antworten sind die gleichen, die noch einmal abgefragt wurden, aber keiner von ihnen richtet sich tatsächlich an den Startbildschirm, wenn ich einen dunklen Hintergrund verwende. 

Ich bin mit dem folgenden in meinem info.plist umgegangen, der eine leichte Statusleiste erzeugt hat.

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
2
CodeBender

Wenn Sie eine modale Präsentation verwenden, müssen Sie Folgendes festlegen:

viewController.modalPresentationCapturesStatusBarAppearance = true
1
RomanMisnikov

So fügen Sie der großen Ansage von @Krunal https://stackoverflow.com/a/49552326/4697535 hinzu

Falls Sie eine UINavigationController verwenden, hat die preferredStatusBarStyle keine Auswirkung auf die UIViewController

Xcode 10 und Swift 4.

Festlegen einer benutzerdefinierten UINavigationController

Beispiel:

class LightNavigationController: UINavigationController {

   open override var preferredStatusBarStyle: UIStatusBarStyle {
       return .lightContent
   }
}

Verwenden Sie eine Erweiterung für eine Lösung auf App-Ebene:

extension UINavigationController {

  open override var preferredStatusBarStyle: UIStatusBarStyle {
      guard let index = tabBarController?.selectedIndex else { return .default }
      switch index {
      case 0, 1, 2: return .lightContent // set lightContent for tabs 0-2
      default: return .default // set dark for tab 3
      }
  }
}
1
Tal Zion

Xcode 10 oder höher

Kein Code erforderlich, folgen Sie einfach den nachstehenden Schritten.

Wenn Sie die Statusleiste in der gesamten App ändern möchten.

  1. Wählen Sie im Projektnavigator (linker Seitenbereich) Projekt aus.
  2. Ziel auswählen.
  3. Wählen Sie die Registerkarte Allgemein.
  4. Bereitstellungsinformationen suchen.
  5. Ändern Sie den Statusleistenstil in Hell (für dunklen Hintergrund "Hell" , heller Hintergrund "Standard" )

Info.plist Änderungen nicht vergessen

  1. Wählen Sie die Registerkarte Info
  2. Fügen Sie diesen Schlüssel in Ihre plist-Datei ein. "Anzeigen des Aussehens der controller-basierten Statusleiste" = NO

Führen Sie Ihr Projekt aus und überprüfen Sie es.

Mein Projekt in Swift 5 und Xcode 10.2

1
Vivek

iOS 11.2

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    UINavigationBar.appearance().barStyle = .black

    return true
}
1
Satish Babariya

Bitte fügen Sie die folgende Zeile in Ihre info.plist ein, dann können nur Sie es erreichen

"Controller-basierte Statusleiste anzeigen = NEIN"

Fügen Sie den folgenden Code in Ihren Code ein und sehen Sie sich die Ausgabe an

        UIApplication.shared.statusBarStyle = .lightContent
        UIApplication.shared.statusBarStyle = .default
0
Nrv

Für Objective C fügen Sie diese Zeile einfach in Ihre didFinishLaunch-Methode Ihrer Anwendung ein

UIApplication.sharedApplication.statusBarStyle = UIStatusBarStyleLightContent;
0
Asfand Shabbir

Ich habe bekommen:

Das Überschreiben von var muss genauso zugänglich sein wie der umgebende Typ

Die wurde durch Hinzufügen von public wie folgt behoben:

override public var preferredStatusBarStyle: UIStatusBarStyle {
    get {
        return .lightContent
    }
}

Auf Swift3 iOS10.

0
James BH

Wenn Sie die Warnung erhalten: Der Setter für 'statusBarStyle' ist in iOS 9.0 veraltet: Verwenden Sie - [UIViewController preferredStatusBarStyle] , und setzen Sie die Statusleiste auf hell oder dunkel. Verwenden Sie dazu den folgenden Code:

//To set the status bar to white
self.navigationController?.navigationBar.barStyle = .black //or .blackTranslucent

//To set the status bar to black
self.navigationController?.navigationBar.barStyle = .default

Dadurch ändert sich Ihre Navigationsleiste nicht. Sie zeigt lediglich den Stil an und ändert daher die Statusleiste entsprechend.

NB. Sie müssen sicherstellen, dass Sie in Ihrer info.plist festgelegt sind.

View controller-based status bar appearance to YES
0
Richard Hope

mit WebkitView

Swift 9.3 iOS 11.3

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {

    @IBOutlet weak var webView: WKWebView!
    var hideStatusBar = true

    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.setNeedsStatusBarAppearanceUpdate()
        let myURL = URL(string: "https://www.Apple.com/")
        let myRequest = URLRequest(url: myURL!)
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red

         webView.load(myRequest)

    }
}

extension UIApplication {

    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }

}
0
Oracular Man