Ich bin mit Xcode 8.0 beta 4.
In der vorherigen version, UIViewController haben Methode, um den status-bar-style
public func preferredStatusBarStyle() -> UIStatusBarStyle
Allerdings fand ich es geändert, um ein "Get NUR varaiable" in Swift 3.
public var preferredStatusBarStyle: UIStatusBarStyle { get }
Wie kann der Stil in meinem UIViewController?
InformationsquelleAutor der Frage WeiJay | 2016-08-03
iOS 11 und Swift 4, Xcode 9 (funktioniert Auch mit iOS 10 und Swift 3)
Ändern in info.plist die Zeile
View controller-based status bar appearance und legen Sie es auf KEINE
Ändern in appDelegate.swift in didFinishLaunchingWithOptions
InformationsquelleAutor der Antwort PRAVEEN
Könnten Sie versuchen, zu überschreiben, wird der Wert zurückgegeben, anstatt es. Die Methode ist deklariert als { get }, so schaffen Sie nur eine get-Methode:
Wenn Sie diese bedingt, Sie müssen rufen Sie
setNeedsStatusBarAppearanceUpdate()
so dass es dann animieren, die sich ändern, wenn Sie bereit sind,InformationsquelleAutor der Antwort Abizern
Swift 3 & 4, iOS 10 & 11, Xcode 9 & 10
Für mich, diese Methode funktioniert nicht:
wenn ich zu jedem view-controller, aber das funktionierte:
In der Datei-info.Liste, hinzufügen Zeile:
View controller-based status bar appearance
und aufNO
Weiter im appdelegate:
InformationsquelleAutor der Antwort Gracu
Wichtige Klarstellung
Es ist sehr wichtig zu verstehen, zwei Ansätze zum anpassen der Statusleiste Aussehen. Sie sind unterschiedlich und sollten nicht gemischt werden.
Ersten Ansatz – eine Farbe für die ganze app
In der info.plist, die Sie finden oder erstellen Sie einen Schlüssel namens
View controller-based status bar appearance
und legen Sie es auf KEINE.
Was es tut? Es ist im wesentlichen begründet eine Einstellung, die sagt, dass in Ihrer Anwendung, die Statusleiste Aussehen definiert ist, nicht individuell durch die einzelnen view-controller. Das ist super wichtig, das zu verstehen. Dies bedeutet, dass Sie einheitliche Einstellung für die gesamte app, für alle Bildschirme. Es gibt zwei Einstellungen:
default
das ist schwarzer text auf weißem hintergrund, oderlightContent
die weißen text auf schwarzem hintergrund.Einstellen, das diese bis (eine Einstellung für alle Bildschirme):
Diese Weise werden Sie nicht brauchen, um wiederherzustellen, dass diese Einstellung auf jedem view-controller. Jedoch können Sie immer darauf zurückgreifen, um diese Methode freiwillig für die Darstellung ändern.
Zweite Ansatz – individuelle Farbe für jeden view-controller
Dies ist das Gegenteil. Damit es funktioniert, gehen Sie vor, um info.plist und legen Sie
View controller-based status bar appearance
zu JA
Diese Weise, sobald eine neue view-controller ist offen, status-bar-style ist individuell, wenn Sie fügen Sie diese Umsetzung in den einzelnen
UIViewController
Instanz, die Sie benötigen:Haben Sie die gleichen wie in der ersten, entweder dunkel oder Licht und Stil für statusbar, individuell für jeden view-controller.
Dritter Ansatz – Hack!
Es ist ein hack, die es erlaubt den Zugriff statusbar direkt:
Warum hack? Wenn Sie brauchen, Statusleiste anderen Farbe als schwarz oder weiß, Sie nutzen undokumentierte API. Sie erhalten
statusBar
Objekt mit KVC und legen Sie Ihre Hintergrundfarbe. Objekt Sie bekommen auf diese Weise istUIStatusBar
die abgeleitet ist vonUIView
- und damit natürlich unterstütztbackgroundColor
Eigenschaft. Dies ist dreckig, nicht rechtlichen Weg, aber so weit ist es der einzige Weg, um benutzerdefinierte Farben für die statusbar (ohne BerücksichtigungUINavigationBar
Ansatz, der ermöglicht das anpassen der navbar+statusbar Aussehen insgesamt). Es kann durchaus dazu führen, dass Ihre app abgelehnt wird. Aber vielleicht hast du Glück. Und wenn Sie sind, in bestimmten komplexen Umständen (wie Hierarchie von verschachtelten, Kind, navigation und view-Controller) kann dies so ziemlich die einzige, oder zumindest die weniger beschwerlichen Weg zum anpassen der statusbar Aussehen (zum Beispiel, um ihn transparent zu machen)Abzuschließen, um statusbar style-einmal und für alle, die Sie benötigen, um zu KEINE der genannten Flagge so, dass die Statusleiste nicht initialisiert seinen Stil mit jedem view-controller. Alternativ lassen jeden einzelnen view-controller definieren, die statusbar Aussehen, setzen Sie das flag auf JA und Folgen Sie der oben genannten Anleitung.
InformationsquelleAutor der Antwort Hexfire
Müssen Sie unter key in der Info.plist-Datei:
View controller-based status bar appearance
mit boolean-Wert gesetzt, umNO
In Ihrem appdelegate Klasse, in
didFinishLaunchingWithOptions
- Methode vor dem return.ändern
backgroundColor
undstatusBarStyle
wie pro Anforderung.InformationsquelleAutor der Antwort Himanshu padia
Wenn Sie möchten, ändern Sie die
statusBar
's Farbe zu weiß, für alle die Ansichten, die in einerUINavigationController
fügen Sie diese inAppDelegate
:Diesem code:
nicht Arbeit für
UIViewControllers
die in einerUINavigationController
weil der compiler sucht diestatusBarStyle
desUINavigationController
nicht für diestatusBarStyle
desViewControllers
enthalten.Hoffe, das hilft denjenigen, die noch nicht gelungen, mit der akzeptierten Antworten!
InformationsquelleAutor der Antwort Mr. Xcoder
Wenn Sie möchten, ändern Sie den status-bar-style jederzeit nach der Ansicht erschien diese:
In der Datei-info.list Zeile hinzufügen: View controller-based status bar appearance und legen Sie es auf JA
InformationsquelleAutor der Antwort alex de oliveira
Können Sie dies auch in der storyboard -
Haben Sie dazu für jede navigation-controller, den Sie haben. Jedoch, alle Ansichten unter, dass der navigation-controller wird sich ändern, alle anzeigen die status bars Stil/Farbe, die Sie gerade ausgewählt haben. Ich finde diese option besser, da siehst du deine Ergebnisse sofort und müssen nicht fügen Sie zusätzliche Zeilen code in jeden view-controller.
(Fertig mit Xcode 8.3.3 in einem alle Swift-Projekt)
InformationsquelleAutor der Antwort Bryan Norden
Ersten Schritt müssen Sie eine Zeile hinzufügen mit der Taste:
View controller-based status bar appearance
und WertNO
zuInfo.plist
- Datei. Danach fügen Sie 2 Funktionen im controller auf bestimmte nur, dass die controller-Effekt:InformationsquelleAutor der Antwort javimuu
Swift 3
In Der Info.plist fügen Sie eine Zeile namens "View controller-based status bar appearance" und setzen Sie seinen Wert auf
No
.InformationsquelleAutor der Antwort swan station
Xcode 8.3.1, Swift 3.1
Erstellen Sie einen neuen Eintrag in der info.plist "View controller-based status bar appearance" auf "KEIN".
Öffnen AppDelegate.swift und fügen Sie diese Zeilen in "didFinishLaunchingWithOptions-Methode":
Anwendung.statusBarStyle = .lightContent
InformationsquelleAutor der Antwort joemalski
Swift 4.0
Verwenden Sie bitte diesen code in "didFinishLaunchingWithOptions launchOptions:" Appdelegate Klasse
InformationsquelleAutor der Antwort Karthickkck
Dieser arbeitete für mich
Set
View controller-based status bar
Erscheinung in KEINE in der plist dann InUIViewController
viewDidAppear
nur noch folgende ZeileInformationsquelleAutor der Antwort Anshad Rasheed
swift 3
wenn View controller-based status bar appearance = JA in der Info.plist
dann verwenden Sie diese Erweiterung für alle NavigationController
wenn es keine UINavigationController und nur UIViewController dann folgenden code verwenden:
InformationsquelleAutor der Antwort Datt1994
Scheint es ein kleines Problem, über die status bar text Farbe beim Umgang mit Navigationsleisten.
Wenn Sie wollen .plist-Eintrag View controller-based status bar appearance eingestellt
YES
es manchmal nicht arbeiten, wenn Sie eine farbige Navigationsleiste.Beispiel:
und
override var preferredStatusBarStyle: UIStatusBarStyle {return .lightContent}
Den code oben funktioniert nicht, auch wenn Sie haben, legen Sie die folgenden in der AppDelegate:
UIApplication.shared.statusBarStyle = .lightContent
Für diejenigen, die noch kämpfen, anscheinend ist es irgendwie Richtern, wenn sich der status bar muss sein, hell oder dunkel, indem Sie die Stile in der nav-Leiste. So, ich konnte dieses Problem beheben, indem Sie die folgende Zeile in viewWillAppear:
nav?.barStyle = UIBarStyle.black
Wenn die bar-Stil schwarz ist, dann hört es sich an Ihre überschriebenen Variablen. Hoffe, dies hilft jemand 🙂
InformationsquelleAutor der Antwort nCr78
Hier ist Apple-Richtlinien/Instruction über status-bar-style ändern.
Wenn Sie möchten, setzen Sie den status-bar-style, application level einstellen und dann
UIViewControllerBasedStatusBarAppearance
zuNO
in Ihrem.plist
- Datei. Und in Ihremappdelegate
>didFinishLaunchingWithOptions
fügen Sie die folgende Zeile (programmgesteuert Sie können es aus dem app-delegate).Objective C
Swift
wenn Sie wan-zu-set-status-bar-style, bei view-controller-Ebene, dann gehen Sie folgendermaßen vor:
UIViewControllerBasedStatusBarAppearance
zuYES
im.plist
- Datei, wenn Sie benötigen, um status-bar-style an UIViewController Ebene nur.In der viewDidLoad-add-Funktion -
setNeedsStatusBarAppearanceUpdate
überschreiben preferredStatusBarStyle in Ihrer view-controller.
Objective C
Swift
Festgelegten Wert .plist nach status-bar-style setup-Ebene.
InformationsquelleAutor der Antwort Krunal
Swift 4+
für die weißen statusbar-text:
InformationsquelleAutor der Antwort Alfi
War ich immer:
Fest durch hinzufügen
public
wie:Auf Swift3 iOS10.
InformationsquelleAutor der Antwort James BH
Für objective C fügen Sie einfach diese Zeile in Ihre Anwendung didFinishLaunch Methode
InformationsquelleAutor der Antwort Asfand Shabbir
iOS 11.2
InformationsquelleAutor der Antwort Satish Babariya
Können Sie mit einem bool-Eigenschaft mit dem Namen "shouldStatusBarDark" wechseln Sie die status bar Farbe. Und Sie können auch aktualisieren Ihren Wert zu ändern, der status bar Farbe, wenn Sie scrollen.
InformationsquelleAutor der Antwort tiantong
mit WebkitView
Swift 9.3 iOS 11.3
InformationsquelleAutor der Antwort Oracular Man
Bitte Fügen Sie die folgende Zeile in deine info.plist dann nur Sie können es erreichen
"View controller-based status bar appearance = NO"
Und fügen Sie den folgenden Code in den code und die Ausgabe
InformationsquelleAutor der Antwort
Swift 3
Um die gleiche Darstellung der Navigationsleiste über Ihre app, Sie können dies tun, in AppDelegate.swift:
InformationsquelleAutor der Antwort João Oliveira