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?
Author: davidrayowens, 2014-06-16

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
}
 143
Author: Mick MacCallum,
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
 142
Author: Maselko,
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

 27
Author: Nico S.,
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ż!)

 20
Author: Biodave,
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
} 
 15
Author: Eric Welander,
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/>
 12
Author: GuiSoySauce,
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:

  1. Ustaw UIViewControllerBasedStatusBarAppearance na YES w .plist
  2. In viewDidLoad call self.setNeedsStatusBarAppearanceUpdate();
  3. Override preferredStatusBarStyle
    override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
  4. 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

Źródło z tutaj i tutaj .

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
    }
}
 9
Author: Constantin Saulenco,
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. HTH
 4
Author: Lord iPhonius,
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-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 }
}
 2
Author: Denis Kreshikhin,
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
}
 1
Author: Sev,
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

Krok 2. Dodaj kod w metodzie, w której musisz zmienić kolor paska stanu:
UIApplication.shared.statusBarStyle = .lightContent //(or .default)
setNeedsStatusBarAppearanceUpdate()

Linijka kodu: setNeedsStatusBarAppearanceUpdate()

 1
Author: Igor,
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