Nachdem ich alle Vorschläge gelesen und einige Dinge ausprobiert hatte, konnte ich dies mit den folgenden Schritten für bestimmte Viewcontroller zum Laufen bringen:
Erster Schritt:
Öffnen Sie Ihre info.plist und geben Sie einen neuen Schlüssel mit dem Namen " View controller-based status bar display " in NO ein
Zweiter Schritt (Nur eine Erklärung, keine Notwendigkeit, dies umzusetzen):
Normalerweise fügen wir den folgenden Code in die Anwendung ein (_: didFinishLaunchingWithOptions :) -Methode des AppDelegate,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
aber das wirkt sich auf die statusBarStyle
von allen Viewcontrollers.
So funktioniert dies für bestimmte ViewController - Letzter Schritt:
Öffnen Sie die Viewcontroller-Datei, in der Sie die ändern möchten, statusBarStyle
und geben Sie den folgenden Code ein viewWillAppear()
:
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
Implementieren Sie außerdem die viewWillDisappear()
Methode für diesen bestimmten viewController und fügen Sie die folgenden Codezeilen ein:
Swift 2
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
}
Swift 3
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}
In diesem Schritt wird zuerst das statusBarStyle
für den bestimmten Ansichtscontroller geändert und dann wieder geändert, default
wenn der bestimmte Ansichtscontroller verschwindet. Wenn Sie das nicht implementieren, viewWillDisappear()
wird das statusBarStyle
dauerhaft auf den neu definierten Wert von geändertUIStatusBarStyle.LightContent
Status bar is initially hidden = YES
Statusleiste ausgeblendet wird, wenn Sie in der Datei info.plist festlegen, dass "Statussteuerung auf Controller-Basis anzeigen = NEIN" angezeigt wird.UIStatusBarStyle.Default
Verwenden" wechselnviewWillDisappear()
, sollten Sie es verwendenviewWillAppear()
, um es zu initialisieren, anstattviewDidLoad()
... Wenn Sie zu dieser Ansicht zurückkehren, ohne dass sie erneut geladen werden muss, sehen Sie nicht das, wasStatusBarStyle
Sie erwarten.UIApplication.shared.statusBarStyle = .lightContent
(Stand 20. September 2019)
Swift 5 , Swift 4.2 , Swift 4
quelle
super.viewWillAppear
dass Sie anrufen, wenn Sie diesen Code kopieren und einfügenUIApplication.shared.statusBarStyle = .lightContent
Ergebnisse in dieser Compiler-Warnung: Setter für 'statusBarStyle' war in iOS 9.0 veraltet: Verwenden Sie - [UIViewController PreferredStatusBarStyle]Ich habe dieses Tutorial befolgt und es hat bei mir funktioniert. Ich bin mir jedoch nicht sicher, ob es irgendwelche Einschränkungen gibt.
https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift
UIViewControllerBasedStatusBarAppearance
auffalse
.AppDelegate.swift
, die enthältdidFinishLaunchingWithOptions
, die gewünschte Farbe ein.UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
Swift 3 Update *
UIApplication.shared.statusBarStyle = .lightContent
quelle
UIApplication.sharedApplication().statusBarHidden = false
zu AppDelegate hinzufügen.swift didFinishLauchingWithOptionsSchnelle 4.2-Lösung mit NavigationController
Erster Schritt:
Öffnen Sie Ihre info.plist und legen Sie einen neuen Schlüssel mit dem Namen „ View - Controller-basierte Statusleiste Aussehen “ oder
UIViewControllerBasedStatusBarAppearance
auf YES jeder VC zu lassen ihren eigenen Status - Eigenschaft verwenden.Zweiter Schritt
Überschreiben Sie in jedem VC die PreferredStatusBarStyle- Eigenschaft wie folgt:
Letzter Schritt
Überschreiben Sie die PreferredStatusBarStyle- Eigenschaft in Ihrer benutzerdefinierten NavigationController-Klasse:
quelle
Es gibt hier eine Milliarde Antworten, also dachte ich mir, warum ich nicht eine weitere in Form einer Erweiterung hinzufügen sollte (mit Hilfe von @ Cœur).
Swift 3
Erweiterung:
Implementierung:
quelle
In Ihrer Info.plist müssen Sie das Erscheinungsbild der View Controller-basierten Statusleiste für einen beliebigen Wert definieren.
Wenn Sie es mit JA definieren, sollten Sie die Funktion selectedStatusBarStyle in jedem Ansichts-Controller überschreiben.
Wenn Sie NO definieren, können Sie den Stil in AppDelegate mit festlegen
quelle
setStatusBarStyle
wurde in iOS 9.0quelle
valueForKey("statusBar")
möglicherweise nicht den Apple-RichtlinienSwift 3
Dies ist die Lösung zum Festlegen der Hintergrundfarbe der Statusleiste für einen bestimmten Ansichts-Controller.
quelle
SWIFT 2
Ich konnte das Erscheinungsbild des Hintergrunds der Statusleiste erfolgreich ändern, indem ich Folgendes in mein viewWillAppear eingefügt habe:
quelle
Implementieren
preferredStatusBarStyle
Sie wie erwähnt und rufen Sieself.setNeedsStatusBarAppearanceUpdate()
aufViewDidLoad
und setzen Sie die Info.plistUIViewControllerBasedStatusBarAppearance
aufYES
(YES
Standardmäßig)Es ist nicht klar, warum es nicht funktioniert. Ich muss den Code überprüfen. Ein anderer Vorschlag ist, den Arbeitscode zu verwenden
viewDidLoad
UIApplication.sharedApplication().statusBarStyle = .LightContent
und diesen auf den Standardwert zu ändern, wenn Sie die Ansicht verschwinden lassenviewWillDisappear
.quelle
für schnell 3
.plist
AppDelegate.swift
quelle
In meiner Situation verwende ich das Storyboard, um meine Ansichts-Controller zu organisieren. Ich möchte den Status aller Statusleisten ändern.
Sie können im Bild unten sehen.
Stars
View - Controller ist einCPBaseNavigationController
undCPBaseNavigationController
ist Unterklasse vonUINavigationController
.Ich versuche die nächsten Setps zu machen:
AppDelegate.swift
Fügen Sie in funcdidFinishLaunchingWithOptions
hinzuaber keine Wirkung.
Suchen Sie in StoryBoard die Auswahl
Base Tab BarController
(Bild oben)Attributes Inspector
. Ändern Sie dasSattus Bar
Attribut inLight Content
.so schlecht, keine Auswirkung.Zuletzt bekomme ich es. Fügen Sie in meinem benutzerdefinierten Navigationscontroller func
CPBaseNavigationController
hinzupreferredStatusBarStyle
Es funktioniert gut!
Außerdem
statusBarStyle
in 9.0 veraltet, können Sie verwenden-[UIViewController preferredStatusBarStyle]
.quelle
Funktioniert für navigationsbasierte Anwendungen
quelle
In Swift 3.0 Xcode 8 ist alles viel einfacher
Verwenden Sie anschließend den folgenden Code in der App Delegate-Datei
Fügen Sie Folgendes ein:
quelle
Swift 3
quelle
Swift 4 Für einen bestimmten ViewController ohne eingebetteten NavigationViewController fügen Sie diesen einfach Ihrer ViewController-Datei hinzu.
quelle
Eine andere wirklich einfache Möglichkeit, diese Arbeit zu erledigen, besteht darin, eine Erweiterung der UINavigationController-Klasse zu erstellen.
Da das Überschreiben der
preferredStatusBarStyle:
Methode NICHT funktioniert, es sei denn, wir tun dies innerhalb der UINavigationController-Klasse.quelle
Ich hatte eine bestimmte Farbe (im RGB-Format) mit dem folgenden Code in der
App Delegate
Datei eingestellt:Sie müssen auch den folgenden Schlüssel in die
Info.plist
Datei einfügen:Anzeigen des Controller-basierten Statusleisten-Erscheinungsbilds mit dem auf NO eingestellten Booleschen Wert
quelle
Ich kann Ihnen einen einfacheren Weg vorschlagen,
Es hat bei mir in iOS 10.1 funktioniert.
Ziel c
Schnell
Ich bin überrascht, dass niemand darauf hingewiesen hat. Wie auch immer, viel Spaß :)
quelle
Ich hatte einige Probleme mit diesem. Ich habe mich nicht wirklich gut gefühlt, wenn ich die Farbe der Statusleiste in der Ansicht global geändert habe und sie dann wieder in der Ansicht geändert habe, ist wie die akzeptierte Antwort verschwunden. Ob Sie es glauben oder nicht, Sie können dies zum Laufen bringen, indem
preferredStatusBarStyle
Sie den gewünschten Ansichts-Controller überschreiben . Nach langer Zeit habe ich Folgendes getan, um es zum Laufen zu bringen:info.plist
Ansicht in JA.preferredStatusBarStyle
.modalPresentationCapturesStatusBarAppearance
Ja.Auch wenn Sie eingebettete Ansichts-Controller haben, wie beispielsweise in einem Navigations-Controller, wird der oberste Ansichts-Controller nach dem Stil der Statusleiste gefragt. Das Überschreiben
childViewControllerForStatusBarStyle
und Übergeben des Embedded View Controllers sollte funktionieren, hat es aber nicht für mich getan. Daher habe ich gerade die bevorzugte Statusleiste des Embedded View Controllers als bevorzugten Statusleistenstil zurückgegeben. Etwas wie das:quelle
UINavigationController
diechildViewControllerForStatusBarStyle
Var dort unterordnen und überschreiben und zurückkehrenself.topViewController
.In Swift 4 oder 4.2
Sie können auf Ihrem VC hinzufügen
und setzen Sie den Rückgabewert auf
Ex:
quelle
(Stand 10. Juni 2020)
Swift 5 ( ohne
.Plist
Datei zu bearbeiten )Wenn Sie verwenden
Storyboard
, gehen Sie zuNavigationController
, wählen Sie die ausnavigationBar
, klicken Sie aufAttributes Inspector
und ändern Sie diestyle
. Wenn Sie möchtenlight content
( weiße Statusleiste ), stellen Sie alles ein, außer beispielsweisedefault
den Stil festlegenblack
möchten Und wenn Sie möchtendark content
( schwarze Statusleiste ), stellen Sie es eindefault
.Das default (
UIBarStyleDefault
) führt zum dunklen VordergrundUIStatusBarStyleDefault
. UndUIBarStyleBlack
gibt eineUIStatusBarStyleLightContent
Statusleiste.Programmatisch
Ohne Navigationsleiste ( Bearbeiten
.Plist
)add
UIViewControllerBasedStatusBarAppearance
/View controller-based status bar appearance
zu deineminfo.plist
und setze Wert isttrue
.Override
diepreferredStatusBarStyle
Eigenschaft in Ihrem Controllerquelle
Swift 3.0 Update
quelle
Was mit mir funktioniert hat, gehen Sie im Storyboard zum Navigationscontroller, wählen Sie die Navigationsleiste aus, klicken Sie auf den Attributinspektor und ändern Sie den Stil von Standard auf Schwarz. Das ist es!
quelle
SWIFT 4.2 Hey, ich wollte eine Lösung teilen, die für mich funktioniert hat und die ich aus einem großartigen Artikel zu diesem ellusiven Thema von Graig Grummitt erhalten habe.
Schritt 1 Wie andere bereits erwähnt haben, fügen Sie unten zu Ihrer PLIST hinzu
Schritt 2 im RootViewcontroller unten hinzufügen
Wenn entweder Eigenschaft zu aktualisieren
statusBarHidden
odervcStatusBarStyle
sie rufensetNeedsStatusBarAppearanceUpdate()
und die Statusleiste mit den neuen Werten für entweder aktualisierenprefersStatusBarHidden
oderpreferredStatusBarStyle
. In meiner Situation musste ich diese Eigenschaften für den Container-Viewcontroller aktualisieren, der das übergeordnete Element des sichtbaren untergeordneten Viewcontrollers war. Ich habe dies mit einer einfachen Delegatenmethode gemacht.Vergessen Sie natürlich nicht, beim Instanziieren des childViewControllers (Visible VC) den MainViewcontroller (Container VC) als seinen Delegaten festzulegen. Das mache ich manchmal. :) :)
Dann habe ich im childViewController bei Bedarf die Delegate-Methode aufgerufen, um die Statusleiste zu aktualisieren.
Wie oben erwähnt, geht Graig Grummitt detaillierter auf diese Lösung ein und arbeitet auch mit UINavigationControllern. Link hier: Der mysteriöse Fall der Statusleiste
quelle
Klicken Sie auf die Gruppe Unterstützende Dateien (linker oberer Name Ihres Projekts). Navigieren Sie zu Info. Klicken Sie irgendwo zwischen den Listen auf +, wie unter dem Namen des Bundles. Fügen Sie "Anzeigen der Controller-basierten Statusleiste" hinzu und setzen Sie sie auf NEIN. Öffnen Sie dann AppDelegate.swift und ändern Sie es wie folgt:
Das ist es.
quelle
Für Xcode 10 können Sie eine Klasse erstellen und vor Ihre viewController-Klasse stellen. Sie können diese Klasse in allen View Controllern aufrufen, für die eine leichte Inhaltsstatusleiste benötigt wird.
Ändern Sie nun Ihre viewController-Klasse in:
Und das ist alles...
quelle
Funktioniert für die Navigation Basierend auf einem bestimmten Ansichts-Controller in swift4
quelle
WARNUNG
Der Setter für 'statusBarStyle' war in iOS 9.0 veraltet: Verwendung - [UIViewController PreferredStatusBarStyle]
Meine Lösung lautete also wie folgt: Erweiterung des Navigationscontrollers:
und wenn Sie einen viewController haben, der einen anderen Stil als den Stil der App hat, können Sie dies vornehmen
Nehmen wir an, Ihr App- Statusstil ist
.default
und Sie möchten, dass dieser Bildschirm so ist,.lightContent
dass barStyle den.lightContent
Standardwert verwendet. Dadurch wird der Statusleistenstil in lightContent geändert und dann sichergestellt, wannviewWillDisappear
geändert. Stellen Sie den barStyle erneut in den App-Statusleistenstil ändern was in unserem Fall ist.default
.Das funktioniert bei mir
quelle
Benutzerdefinierte Farbe für die Statusleiste (iOS11 +, Swift4 +)
Wenn Sie nach einer Lösung suchen, wie Sie die Statusleiste in Ihre benutzerdefinierte Farbe ändern können, ist dies die funktionierende Lösung.
quelle