webentwicklung-frage-antwort-db.com.de

So ändern Sie den Stil der Statusleiste - iOS 12

Ich muss den Statusleistenstil auf jedem Ansichtscontroller basierend auf der Hintergrundfarbe aktualisieren (was UINavigationController automatisch tut).

Habe alle Optionen, die auf stackoverflow beschrieben werden, ausprobiert (View controller-based status bar appearance in info.plist aufYESgesetzt), aber bei mir funktionierte keine.

Ich verwende Xcode 10 Beta 6 und Swift 4.2 für iOS 12.

8
Tomáš Pánik

Setzen Sie View controller-based status bar appearance auf NO im info.plist und überschreiben Sie preferredStatusBarStyle in jedem Ansichtscontroller wie folgt:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Rufen Sie setNeedsStatusBarAppearanceUpdate() in Ihrem View-Controller (z. B. in viewDidLoad()) auf.

15
Carpsen90

Swift 4.2, iOS 12

View controller-based status bar appearance muss jetzt in info.plist auf YES gesetzt werden, da UIKit nicht mehr wünscht, dass wir den Statusleistenstil über UIApplication.shared bearbeiten.

Wenn Sie die Änderung dann auf App-Ebene anwenden möchten, überschreiben Sie einfach preferredStatusBarStyle im entsprechenden Container-View-Controller (idealerweise der Stamm).

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

... und dies wird sich auf alle Ansichtssteuerungen übertragen. Wenn Sie den Statusleistenstil pro Ansichts-Controller bearbeiten möchten, wenden Sie diese Überschreibung pro Ansichts-Controller an.

Wenn sich der Statusleistenstil während der Laufzeit ändert, müssen Sie setNeedsStatusBarAppearanceUpdate() (von einer beliebigen Stelle im Container/Root-View-Controller oder diesem speziellen View-Controller) aufrufen. Andernfalls ist dies nicht erforderlich.

18
bsod

Ich habe Xcode 10.2 und habe festgestellt, dass das Setzen des Statusleisten-Aussehens von View Controller in info.plist auf "YES" den Statusleisten-Stil überhaupt nicht ändert.

Ich habe jedoch festgestellt, dass das Ändern von zwei Schlüsseln in der Datei info.plist die gesamte Arbeit des Änderns der Statusleiste in hell oder dunkel ohne zusätzliche Codierung erledigt.

Hier ist, was ich getan habe, um es für mich selbst zu beheben
Wenn Sie in der Datei info.plist über die oberste Zeile "Information Property List" fahren, wird ein kleines rundes "+" angezeigt. Klicken Sie auf diese Schaltfläche und scrollen Sie durch die Elemente, bis Sie die folgenden Schlüssel finden.

Anzeigen des Aussehens der controller-basierten Statusleiste [setze diesen Wert auf] NEIN
Statusleistenstil [setze diesen Wert auf] UIStatusBarStyleLightContent

HINWEIS:Der UIStatusBarStyleLightContent wird nicht als auswählbares Element in der Werteliste gefunden und muss in das Wertefeld eingegeben werden.

info.plist

Ich hoffe, das hilft Ihnen oder anderen, die nach einer Antwort auf diese Frage suchen.

5
Jim Bray

Wenn Sie View controller-based status bar appearance in info.plist aufYESeingestellt haben und Ihr View-Controller in UINavigationController eingebettet ist, ist Ihr Navigationscontroller für die Aktualisierung des Balkenstils (über navigationController.navigationBar.barStyle) verantwortlich. Die preferredStatusBarStyle-Eigenschaft wird ignoriert

4
swearwolf

Zum Schluss, was hat bei mir geklappt:

Zur Info.plist hinzufügen:

View controller-based status bar appearance : YES

Fügen Sie für jeden ViewController viewDidLoad () und viewDidAppear () hinzu:

self.setNeedsStatusBarAppearanceUpdate()

a) Fügen Sie in der Statusleiste für dunkle Farben Folgendes zu ViewController hinzu:

    override var preferredStatusBarStyle: UIStatusBarStyle {
    return .default
}

b) Fügen Sie für die Statusleiste für weiße Farbe ViewController hinzu:

    override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
0
Anton Eregin

Wenn Sie in einen Navigationscontroller eingebunden sind, benötigen Sie Folgendes:

final class LightNavigationController: UINavigationController {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}
0
thexande