UIStatusBarStyle nie działa w Swift
Próbuję zmienić kolor paska stanu w mojej aplikacji Swift na biały, ale uderzam w ceglaną ścianę. Mam 3 Viewcontrollery, które są osadzone 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.plik swift, ale nie zadziałał.
application.statusBarStyle = .LightContent
I
UIApplication.sharedApplication().statusBarStyle = .LightContent
Wszystko, co doktorzy mają do powiedzenia na ten temat, to ten UIBarButtonStyle jest Int i dał mi ten fragment enum, który w ogóle nie pomógł mi w implimentacji.
enum UIStatusBarStyle : Int {
case Default
case LightContent
case BlackOpaque
}
Co mi umyka? 11 answers
Masz dwie opcje.
Jeśli chcesz kontynuować ręczne ustawianie stylu paska stanu, kontynuuj to, co robisz, ale musisz dodać następujący klucz do swoich informacji.plik plist o wartości NO
.
Wyświetl wygląd paska stanu opartego na kontrolerze
Lub, jeśli chcesz nadal używać wyglądu paska stanu opartego na kontrolerze widoku, zamiast ustawiać styl statusbarsty aplikacji, Nadpisz Właściwość preferredStatusBarStyle
w każdym kontrolerze widoku dla których chcesz określić styl paska stanu.
Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Swift 2
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-26 14:19:25
Swift 3.0
W AppDelegate.swift didFinishLaunchingWithOptions
UIApplication.shared.statusBarStyle = .lightContent
Info.plist
View controller-based status bar appearance -> NO
Swift 2.2
W AppDelegate.swift didFinishLaunchingWithOptions
UIApplication.sharedApplication().statusBarStyle = .LightContent
Info.plist
View controller-based status bar appearance -> NO
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-08 01:04:50
Musisz ustawić:
navigationController.navigationBar.barStyle = .black
I tekst pojawi się w kolorze białym
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-04 00:24:04
Dla iOS9.x i Xcode7, włóż to do środka AppDelegate.swift
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
UINavigationBar.appearance().barStyle = .Black
}
To automatycznie zmieni styl paska stanu na .Lightcontent
dla wszystkich kontrolerów widoku wewnątrz kontrolera UINavigationController.
(również usuń {[3] } Z Info.plist, aby stłumić ostrzeżenia, które prawdopodobnie widzisz też!)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-28 03:47:45
W Swift 3 Styl paska stanu został zmieniony na właściwość obliczoną w UIViewController, którą można zastąpić w następujący sposób:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent //or default
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-17 15:57:27
Na iOS 9 poniższe (setStatusBarStyle) jest przestarzałe i otrzymasz ostrzeżenie, jeśli pójdziesz w tę stronę.
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
Jeśli chcesz zmienić wszystkie paski stanu w jednym ujęciu, spróbuj dodać następujące informacje.plist. Spowoduje to również, że pasek stanu ekranu startowego będzie biały. Podczas gdy powyższy kod nie będzie.
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-06 22:46:27
Dla mnie wszystko powyżej nie działa dopóki nie dodam:
self.navigationController?.navigationBar.barStyle = .black;
Więc:
- Ustaw
UIViewControllerBasedStatusBarAppearance
naYES
w.plist
- In
viewDidLoad
callself.setNeedsStatusBarAppearanceUpdate();
- Override preferredStatusBarStyle
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
- w metodzie nadrzędnej ustawiłem również
navigationBar.barStyle
tak ostateczny
dla światło treść:override var preferredStatusBarStyle: UIStatusBarStyle { self.navigationController?.navigationBar.barStyle = .black;//or default return .lightContent //or default }
i dla czarnej zawartości Użyj domyślnego
A jeśli to nie zadziała ty można spróbować dodać UINavigationController
extension
:
extension UINavigationController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
if let lastVC = self.viewControllers.last
{
return lastVC.preferredStatusBarStyle
}
return .default
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:29
Dziwne, używając Swift 3.1 & XC8. 2. 1, ale wszystkie powyższe nie zadziałały.
To, co zrobiłem, jest po prostu
extension UINavigationController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
get {
return .lightContent
}
}
}
Żadnych Plist, żadnych innych rzeczy.
HTHWarning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-16 12:22:32
W Swift 3.0 możesz nadpisać getter w ViewController dla wyglądu paska stanu opartego na kontrolerze:
override var preferredStatusBarStyle: UIStatusBarStyle {
get { return .lightContent }
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-09 06:35:30
Nie edytuj informacji.plist. Dodaj to do kontrolera ViewController.swift:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-15 06:59:13
Krok 1. Dodaj do info.plist View controller-based status bar appearance -> NO
UIApplication.shared.statusBarStyle = .lightContent //(or .default)
setNeedsStatusBarAppearanceUpdate()
Linijka kodu: setNeedsStatusBarAppearanceUpdate()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-29 03:05:24