Как я могу изменить внешний вид строки состояния? - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь изменить внешний вид строки состояния на основе пользовательских ошибок, которые определяют, включен ли у пользователя режим, но использование setNeedsStatusBarAppearanceUpdate() не работает.Я установил строку состояния по умолчанию как Light.Это код, который я сейчас использую:

var darkModeOn: Bool! 

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    let isDarkMode = UserDefaults.standard.bool(forKey: "isDarkMode")  // Retrieve the state

    if isDarkMode == false{

        UserDefaults.standard.set(false, forKey: "isDarkMode")
        UIApplication.shared.statusBarStyle = .default
        view.backgroundColor = UIColor.white

    }else{

        UserDefaults.standard.set(true, forKey: "isDarkMode")
        UIApplication.shared.statusBarStyle = .lightContent
        view.backgroundColor = UIColor(red: 35/255, green: 35/255, blue: 35/255, alpha: 1)


    }

}

И я пытался использовать

override var preferredStatusBarStyle: UIStatusBarStyle {
    return darkModeOn ? .lightContent : .default
}

, но показывает только светлую строку состояния

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Попробуйте, у меня это работает:

  1. В Info.plist установите UIViewControllerBasedStatusBarAppearance на YES
  2. Переопределить preferredStatusBarStyle:

    override var preferredStatusBarStyle: UIStatusBarStyle { return UserDefaults.standard.bool(forKey: "isDarkMode") ? .lightContent : .default }

НО, если этот контроллер представления встроен в контроллер навигации, переопределение будет игнорироваться, поэтому вместо этого следует использовать этот код:

self.navigationController?.navigationBar.barStyle = UserDefaults.standard.bool(forKey: "isDarkMode") ? .black : .default

Надеюсь, это поможет

0 голосов
/ 11 февраля 2019

В Info.plist установите для «Просмотр внешнего вида строки состояния на основе контроллера» значение YES.Если для него установлено значение NO, то оно будет применять значение по умолчанию ко всем контроллерам представлений.

После того, как будет установлено значение yes, используйте это для переопределения внешнего вида в каждом контроллере представления:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
    //or return .default
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...