如何更改状态栏的外观?

时间:2019-02-11 17:20:00

标签: ios swift nsuserdefaults statusbar

我正在尝试根据Userdefaults更改此处状态栏的外观,后者会检测用户是否打开了模式,但无法使用setNeedsStatusBarAppearanceUpdate()。我将默认状态栏设置为“浅”。 这是我当前正在使用的代码:

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 :(得分:0)

在Info.plist中,将“基于View Controller的状态栏外观”设置为YES。如果将其设置为NO,则它将对所有视图控制器应用默认值。

将其设置为“ yes”后,可以使用它覆盖每个视图控制器中的外观:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
    //or return .default
}

答案 1 :(得分:0)

尝试一下,它对我有用:

  1. 在Info.plist中,将app/presenters/offers_presenter.rb设置为UIViewControllerBasedStatusBarAppearance
  2. 覆盖YES

    preferredStatusBarStyle

但是,如果此视图控制器嵌入在导航控制器中,则重写将被忽略,因此您必须改为使用以下代码:

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

希望这会有所帮助