Folgte ich dieser thread überschreiben -preferredStatusBarStyle
aber es ist nicht genannt.
Gibt es irgendwelche Optionen, die ich ändern kann, um es zu aktivieren? (Ich bin mit XIBs in meinem Projekt.)
InformationsquelleAutor der Frage trgoofi | 2013-09-26
Mögliche Ursache
Ich hatte das gleiche problem, und dachte, es war passiert, weil ich nicht setzen der root-view-controller in meiner Anwendung Fenster.
Den
UIViewController
in die ich hatte umgesetztpreferredStatusBarStyle
wurde in einerUITabBarController
die kontrolliert das Aussehen der Ansichten auf dem Bildschirm.Wenn ich die root-view-controller-zu-Punkt dieser
UITabBarController
wird in der Statusleiste änderungen gestartet, um korrekt zu arbeiten, wie erwartet (und diepreferredStatusBarStyle
Methode wurde immer genannt).Alternative Methode (Deprecated in iOS 9)
Alternativ können Sie rufen Sie eine der folgenden Methoden, soweit angemessen, in jeder view-Controller, je nach Hintergrundfarbe, statt
setNeedsStatusBarAppearanceUpdate
:oder
Beachten Sie, dass Sie müssen auch
UIViewControllerBasedStatusBarAppearance
zuNO
in der plist-Datei, wenn Sie diese Methode verwenden.InformationsquelleAutor der Antwort AbdullahC
Für jedermann mit einem UINavigationController:
Den
UINavigationController
nicht nach vorne aufpreferredStatusBarStyle
Anrufe zu seinem Kind view-Controller. Statt dessen gelingt es seinen eigenen Staat - wie es sein sollte, es ist Zeichnung an der Spitze des Bildschirms, wo der status bar Leben und so sollte für Sie verantwortlich. HIERFÜR implementierenpreferredStatusBarStyle
in Ihrem VCs innerhalb einer nav-controller werden gar nichts tun - Sie werden nie genannt.Der trick ist, was die
UINavigationController
verwendet, um zu entscheiden, was die Rückkehr fürUIStatusBarStyleDefault
oderUIStatusBarStyleLightContent
. Sie stützt dies auf denUINavigationBar.barStyle
. Der Standard (UIBarStyleDefault
) Ergebnisse in den dunklen VordergrundUIStatusBarStyleDefault
status bar. UndUIBarStyleBlack
geben einUIStatusBarStyleLightContent
status bar.TL;DR:
Wenn Sie wollen
UIStatusBarStyleLightContent
auf eineUINavigationController
verwenden:InformationsquelleAutor der Antwort Tyson
Also: ich habe sogar Hinzugefügt, eine Kategorie zu UINavigationController, aber mit den Methoden:
hatte und diese zurück die aktuell sichtbare UIViewController. Das können die aktuell sichtbare view-controller seine eigenen bevorzugten Stil/Sichtbarkeit.
Hier ist eine komplette code-snippet:
Swift:
In Objective-C:
Und für eine gute Maßnahme, hier ist, wie es dann umgesetzt in ein UIViewController:
In Swift
In Objective-C
Schließlich, stellen Sie sicher, dass Ihre app plist hat NICHT haben die "View controller-based status bar appearance" auf NEIN gesetzt. Entweder löschen Sie die Zeile oder setzen Sie es auf JA (was ich glaube, ist der Standard jetzt für iOS 7?)
InformationsquelleAutor der Antwort serenn
Für alle, die noch damit kämpfen, diese einfache Erweiterung im swift sollte das problem zu beheben für Sie.
InformationsquelleAutor der Antwort Alex Brown
Tyson ' s Antwort richtig ist, können Sie den status bar Farbe weiß im
UINavigationController
.Wenn jemand will, um zu erreichen das gleiche Ergebnis, indem Sie den code in
AppDelegate
dann folgenden code verwenden, und schreiben Sie es inAppDelegate's
didFinishLaunchingWithOptions
Methode.Und vergessen Sie nicht die
UIViewControllerBasedStatusBarAppearance
zuYES
im .plist-Datei, sonst wird die änderung nicht widerspiegeln.Code
InformationsquelleAutor der Antwort Yogesh Suthar
Zusätzlich zu Hippo ' s Antwort: wenn Sie einen UINavigationController, dann ist es wahrscheinlich besser, um eine Kategorie hinzuzufügen:
Diese Lösung ist wahrscheinlich besser als der Wechsel zu bald-zu-sein, veraltet, Verhalten.
InformationsquelleAutor der Antwort Artem Abramov
@serenn ist Antwort oben ist noch eine große für den Fall der UINavigationControllers. Aber für swift 3 die childViewController Funktionen wurden geändert, um
vars
. Also dieUINavigationController
Erweiterung code sollte sein:Und dann in der view-controller, das sollte diktieren, die status-bar-style:
InformationsquelleAutor der Antwort John Stricker
Wenn Ihr viewController ist unter UINavigationController.
Unterklasse UINavigationController und fügen Sie
ViewController ist
preferredStatusBarStyle
aufgerufen werden.InformationsquelleAutor der Antwort PowHu
UIStatusBarStyle in iOS 7
Der Statusleiste in iOS 7 ist transparent, der Blick dahinter zeigt durch.
Stil der Statusleiste bezieht sich auf die Auftritte von seinem Inhalt. In iOS 7, die status bar Inhalte ist entweder dunkel (
UIStatusBarStyleDefault
) oder Licht (UIStatusBarStyleLightContent
). BeideUIStatusBarStyleBlackTranslucent
undUIStatusBarStyleBlackOpaque
sind deprecated in iOS 7.0. VerwendenUIStatusBarStyleLightContent
statt.So ändern
UIStatusBarStyle
Wenn unterhalb der Statusleiste befindet sich eine Navigationsleiste, die status-bar-Stil wird angepasst die navigation bar-Stil (
UINavigationBar.barStyle
):Speziell, wenn die navigation-bar-Stil ist UIBarStyleDefault, die status-bar-Stil wird
UIStatusBarStyleDefault
; wenn die navigation-bar-Stil istUIBarStyleBlack
die status-bar-Stil wirdUIStatusBarStyleLightContent
.Wenn es keine Navigationsleiste unter der status bar die status bar-Stil gesteuert werden kann und geändert durch die einzelnen view-controller, während die app läuft.
-
[UIViewController preferredStatusBarStyle]
ist eine neue Methode Hinzugefügt, im iOS-7. Es kann überschrieben werden, um die Rückkehr der bevorzugte-status-bar-style:Wenn die status-bar-style sollten kontrolliert werden, indem eine untergeordnete view-controller anstelle von selbst außer Kraft setzen
-[UIViewController childViewControllerForStatusBarStyle]
zurück, der Kind view-controller.Wenn Sie es vorziehen, entscheiden sich aus diesem Verhalten, und legen Sie die status-bar-Stil durch die Verwendung der
-[UIApplication statusBarStyle]
Methode hinzufügen dieUIViewControllerBasedStatusBarAppearance
- Taste, um die appInfo.plist
- Datei und geben Sie ihm den Wert NO.InformationsquelleAutor der Antwort oscarr
Wenn jemand mit einem Navigation-Controller und möchte, dass alle Ihre navigation-Controller zu haben, der schwarze Stil, Sie können schreiben, eine Erweiterung zu UINavigationController, wie dies in Swift 3 und es gilt für alle navigation-Controller (anstelle der Zuweisung zu einem controller zu einem Zeitpunkt).
InformationsquelleAutor der Antwort Benjamin Lowry
Meine app verwendet alle drei:
UINavigationController
UISplitViewController
UITabBarController
damit diese alle scheinen, um die Kontrolle über die Statusleiste, und bewirktpreferedStatusBarStyle
nicht aufgerufen werden, für Ihre Kinder. Um dieses Verhalten zu überschreiben, die Sie erstellen können, eine Erweiterung, wie der rest der Antworten erwähnt habe. Hier ist eine Erweiterung für alle drei, im Swift 4. Wunsch war Apple mehr Klarheit über diese Art von Sachen.InformationsquelleAutor der Antwort Luis
Swift 3 iOS 10 Lösung:
InformationsquelleAutor der Antwort Statik
Auf einem UINavigationController,
preferredStatusBarStyle
ist nicht genannt, weil seinetopViewController
bevorzugtself
. AlsopreferredStatusBarStyle
genannt, die auf einem UINavigationController, müssen Sie ändern IhrechildViewControllerForStatusBarStyle
.Tun es für einen UINavigationController (meine Empfehlung):
Es für alle UINavigationController (Achtung: dies betrifft UIDocumentPickerViewController, UIImagePickerController, usw.):
InformationsquelleAutor der Antwort Cœur
Hier ist meine Methode für die Lösung dieser.
Definieren ein Protokoll, genannt AGViewControllerAppearance.
AGViewControllerAppearance.h
Definieren Sie die Kategorie auf UIViewController genannt Upgrade.
UIViewController+Upgrade.h
UIViewController+Upgrade.m
Nun, es ist Zeit zu sagen, dass Sie view-controller ist die Umsetzung der AGViewControllerAppearance Protokoll.
Beispiel:
Natürlich die Implementierung der restlichen Methoden (showsStatusBaranimatesStatusBarVisibilityprefferedStatusBarAnimation) aus dem Protokoll und UIViewController+Upgrade tun das richtige
die Anpassung basiert auf die Werte, die von Ihnen zur Verfügung.
InformationsquelleAutor der Antwort arturgrigor
Wenn jemand dieses problem mit UISearchController.
Erstellen Sie einfach eine neue Unterklasse von UISearchController, und fügen Sie folgenden code in die Klasse:
InformationsquelleAutor der Antwort Tai Le
In Swift für jede Art von UIViewController:
In Ihrem
AppDelegate
set:myRootController
werden kann jede Art vonUIViewController
z.B.UITabBarController
oderUINavigationController
.Dann, überschreiben Sie diese root-controller wie diesem:
Diese ändern das Aussehen der Statusleiste in der gesamten app, weil die root-controller ist allein verantwortlich für die status bar Aussehen.
Denken Sie daran, die Eigenschaft
View controller-based status bar appearance
JA in IhremInfo.plist
um diese Arbeit zu machen (das ist der Standard).InformationsquelleAutor der Antwort Damnum
Beachten Sie, dass bei Verwendung der
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
Lösungsicher sein, zu gehen, um Ihre plist und legen Sie "View controller-based status bar appearance" auf "JA". Wenn der NEIN-es wird nicht funktionieren.
InformationsquelleAutor der Antwort Richard Garfield
Den NavigationController oder TabBarController sind diejenigen, die Sie brauchen, um die Stil. Hier ist, wie ich das gelöst: https://stackoverflow.com/a/39072526/242769
InformationsquelleAutor der Antwort aryaxt