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.
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.
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.
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.
Ich hoffe, das hilft Ihnen oder anderen, die nach einer Antwort auf diese Frage suchen.
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
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
}
Wenn Sie in einen Navigationscontroller eingebunden sind, benötigen Sie Folgendes:
final class LightNavigationController: UINavigationController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}