web-dev-qa-db-de.com

UIStatusBarStyle funktioniert nicht in Swift

Ich versuche, die Farbe der Statusleiste in meiner App Swift= in Weiß zu ändern, stoße aber auf eine Mauer. Ich habe 3 ViewController, die jeweils in einen NavigationController eingebettet sind (könnte das das Problem sein) ? Ich habe bereits versucht, den Code in die NavigationController-Klasse einzufügen.) Ich habe die beiden folgenden Codeteile in der Datei didFinishLaunchingWithOptions meiner AppDelegate.Swift ausprobiert, aber keines hat funktioniert.

application.statusBarStyle = .LightContent

und

UIApplication.sharedApplication().statusBarStyle = .LightContent

Alles, was die Docs dazu zu sagen haben, ist, dass UIBarButtonStyle ein Int ist und mir dieses Enum-Snippet gegeben hat, das mir bei der Implementierung überhaupt nicht geholfen hat.

enum UIStatusBarStyle : Int {
    case Default
    case LightContent
    case BlackOpaque
}

Was vermisse ich?

84
davidrayowens

Sie haben zwei Möglichkeiten.

Wenn Sie den Stil der Statusleiste weiterhin manuell festlegen möchten, machen Sie weiter, was Sie tun, aber Sie müssen Ihrer info.plist-Datei den folgenden Schlüssel mit dem Wert NO hinzufügen.

Anzeigen des Aussehens der controller-basierten Statusleiste

Wenn Sie weiterhin das auf dem Ansichts-Controller basierende Erscheinungsbild der Statusleiste verwenden möchten, anstatt den statusBarStyle der Anwendung festzulegen, überschreiben Sie die Eigenschaft preferredStatusBarStyle in jedem Ansichts-Controller, für den Sie einen Statusleistenstil angeben möchten.

Swift

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Swift 2

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
}
144
Mick MacCallum

Swift 3.

in AppDelegate.Swift didFinishLaunchingWithOptions

UIApplication.shared.statusBarStyle = .lightContent

Info.plist

View controller-based status bar appearance -> NO

Swift 2.2

in AppDelegate.Swift didFinishLaunchingWithOptions

UIApplication.sharedApplication().statusBarStyle = .LightContent

Info.plist

View controller-based status bar appearance -> NO
143
Maselko

Sie müssen Folgendes einstellen:

navigationController.navigationBar.barStyle = .black

und der Text wird in weiß angezeigt

31
Nico S.

Geben Sie dies für iOS9.x und Xcode7 einfach in AppDelegate.Swift Ein:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    UINavigationBar.appearance().barStyle = .Black

} 

Dadurch wird der Stil Ihrer Statusleiste für alle Ansichtscontroller in einem UINavigationController automatisch auf .Lightcontent Gesetzt.

(Löschen Sie auch View controller-based status bar appearance Aus der Info.plist, um die Warnungen zu unterdrücken, die Sie wahrscheinlich auch sehen!)

20
Biodave

In Swift 3 wurde der Statusleistenstil in eine berechnete Eigenschaft in UIViewController geändert, die Sie wie folgt überschreiben können:

override var preferredStatusBarStyle: UIStatusBarStyle {
   return .lightContent //or default
} 
15
Eric Welander

Unter iOS 9 ist das Folgende (setStatusBarStyle) veraltet und Sie erhalten eine Warnung, wenn Sie diesen Weg gehen.

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

Wenn Sie möchten, dass alle Statusleisten auf einmal geändert werden, fügen Sie Folgendes zu Ihrer Info.plist hinzu. Dadurch wird auch die Statusleiste Ihres Startbildschirms weiß. Während der obige Code nicht.

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
12
GuiSoySauce

für mich funktioniert alles oben nicht, bis ich hinzufüge:

self.navigationController?.navigationBar.barStyle = .black;

so:

  1. Setze UIViewControllerBasedStatusBarAppearance in .plist Auf YES
  2. In viewDidLoadself.setNeedsStatusBarAppearanceUpdate(); aufrufen
  3. Überschreiben Sie preferredStatusBarStyle
    override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
  4. Bei der überschriebenen Methode habe ich auch den navigationBar.barStyle So final gesetzt
    für leichten Inhalt:
    override var preferredStatusBarStyle: UIStatusBarStyle { self.navigationController?.navigationBar.barStyle = .black;//or default return .lightContent //or default }
    und für schwarzen Inhalt Standard verwenden

Die Quelle von hier und hier .

und wenn dies nicht funktioniert, können Sie versuchen, ein UINavigationControllerextension hinzuzufügen:

extension UINavigationController
{
    override open var preferredStatusBarStyle: UIStatusBarStyle {
        if let lastVC = self.viewControllers.last
        {
            return lastVC.preferredStatusBarStyle
        }

        return .default
    }
}
9

Seltsam, mit Swift 3.1 & XC8.2.1, aber alle oben genannten Funktionen haben nicht funktioniert.

Was ich getan habe, ist einfach

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

Kein Plist, kein anderes Zeug. HTH

5
Lord iPhonius

In Swift 3.0 können Sie einen Getter in ViewController für das Aussehen der auf View Controller basierenden Statusleiste überschreiben:

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

Schritt 1. Zur info.plist hinzufügen View controller-based status bar appearance -> NO

Schritt 2. Fügen Sie Code in die Methode ein, in der Sie die Farbe der Statusleiste ändern müssen:

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

Codezeile: setNeedsStatusBarAppearanceUpdate()

1
Igor

Bearbeiten Sie nicht Ihre Info.plist. Fügen Sie dies zu Ihrem ViewController hinzu.Swift:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
}
1
Sev