Próbuję zmienić kolor paska stanu w mojej aplikacji Swift na biały, ale uderzam w ścianę z cegły. Mam 3 ViewControllers, z których każdy jest osadzony w NavigationController (czy to może być problem? Próbowałem już umieścić kod w klasie NavigationController). Wypróbowałem oba poniższe fragmenty kodu w didFinishLaunchingWithOptions mojego AppDelegate .swift, ale żaden nie działał.
application.statusBarStyle = .LightContent
i
UIApplication.sharedApplication().statusBarStyle = .LightContent
Wszystko, co Docs mają do powiedzenia na ten temat, to to, że UIBarButtonStyle jest Intem i dał mi ten fragment wyliczenia, który wcale nie pomógł mi w implementacji.
enum UIStatusBarStyle : Int {
case Default
case LightContent
case BlackOpaque
}
czego mi brakuje?
źródło
w AppDelegate.swift didFinishLaunchingWithOptions
UIApplication.shared.statusBarStyle = .lightContent
Info.plist
View controller-based status bar appearance -> NO
w AppDelegate.swift didFinishLaunchingWithOptions
UIApplication.sharedApplication().statusBarStyle = .LightContent
Info.plist
View controller-based status bar appearance -> NO
źródło
Musisz ustawić:
navigationController.navigationBar.barStyle = .black
a tekst pojawi się na biało
źródło
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
. Musisz tylko dobrze napisać tę linięviewDidLoad
dla wrok. Upewnij się, że korzystaszView controller-based status bar appearance = YES
z tego rozwiązania.W przypadku iOS9.x i Xcode7 po prostu umieść to w środku
AppDelegate.swift
:func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { UINavigationBar.appearance().barStyle = .Black }
Spowoduje to automatyczną zmianę stylu paska stanu
.Lightcontent
na wszystkie kontrolery widoku w kontrolerze UINavigationController.(Ponadto usuń
View controller-based status bar appearance
z Info.plist, aby pominąć ostrzeżenia, które prawdopodobnie również widzisz!)źródło
W Swift 3 styl paska stanu zmienił się na obliczoną właściwość w UIViewController, którą można zastąpić w następujący sposób:
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent //or default }
źródło
W systemie iOS 9 następujące (setStatusBarStyle) są przestarzałe i otrzymasz ostrzeżenie, jeśli zrobisz to w ten sposób.
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
Jeśli chcesz, aby wszystkie paski statusu zostały zmienione za jednym razem, spróbuj dodać następujące elementy do swojej Info.plist. Spowoduje to również ustawienie białego paska stanu na ekranie uruchamiania. Chociaż powyższy kod nie.
<key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
źródło
dla mnie wszystko powyżej nie zadziała, dopóki nie dodam:
self.navigationController?.navigationBar.barStyle = .black;
więc:
UIViewControllerBasedStatusBarAppearance
naYES
in.plist
viewDidLoad
rozmowyself.setNeedsStatusBarAppearanceUpdate();
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
navigationBar.barStyle
ostateczną wartośćdla zawartości jasnej :
override var preferredStatusBarStyle: UIStatusBarStyle { self.navigationController?.navigationBar.barStyle = .black;//or default return .lightContent //or default }
a dla zawartości czarnej użyj wartości domyślnej
Źródło stąd i tutaj .
a jeśli to nie zadziała, możesz spróbować dodać
UINavigationController
extension
:extension UINavigationController { override open var preferredStatusBarStyle: UIStatusBarStyle { if let lastVC = self.viewControllers.last { return lastVC.preferredStatusBarStyle } return .default } }
źródło
Dziwne, używając Swift 3.1 i XC8.2.1, ale wszystkie powyższe nie działały.
To, co zrobiłem, jest sprawiedliwe
extension UINavigationController { override open var preferredStatusBarStyle: UIStatusBarStyle { get { return .lightContent } } }
Bez Plist, żadnych innych rzeczy. HTH
źródło
W Swift 3.0 można przesłonić metodę pobierającą w ViewController dla wyglądu paska stanu opartego na kontrolerze View:
override var preferredStatusBarStyle: UIStatusBarStyle { get { return .lightContent } }
źródło
Nie edytuj swojego Info.plist. Dodaj to do swojego ViewController.swift:
override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent }
źródło
Krok 1. Dodaj do info.plist
View controller-based status bar appearance -> NO
Krok 2. Dodaj kod w metodzie, w której chcesz zmienić kolor paska stanu:
UIApplication.shared.statusBarStyle = .lightContent //(or .default) setNeedsStatusBarAppearanceUpdate()
Kluczowa linia kodu:
setNeedsStatusBarAppearanceUpdate()
źródło