Ios 如何更改状态栏的外观?

Ios 如何更改状态栏的外观?,ios,swift,nsuserdefaults,statusbar,Ios,Swift,Nsuserdefaults,Statusbar,我正试图根据Userdefaults更改here状态栏的外观,Userdefaults检测用户是否打开了模式,但使用setNeedsStatusBarAppearanceUpdate无法工作。我将默认状态栏设置为灯光。 这是我当前使用的代码: var darkModeOn: Bool! override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) let isDarkMode

我正试图根据Userdefaults更改here状态栏的外观,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
}

但is仅在Info.plist中将基于控制器的视图状态栏外观设置为“是”中显示灯光状态栏。如果设置为“否”,则会将默认值应用于所有视图控制器

设置为“是”后,使用此选项覆盖每个视图控制器中的外观:

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

试试这个,它对我有用:

在Info.plist中,将UIViewControllerBasedStatusBarAppearance设置为YES 覆盖preferredStatusBarStyle:

重写变量preferredStatusBarStyle:UIStatusBarStyle{ 返回UserDefaults.standard.boolforKey:isDarkMode?.lightContent:.默认值 }

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

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

希望这有帮助

在您的Info.plist文件中,是否已将基于视图控制器的状态栏外观设置为“是”?在Info.plist中,基于视图控制器的状态栏外观设置为“NoStrangely”,似乎UI未更新。如果我启动应用程序,状态栏样式将根据我在项目设置中设置的设置进行设置。如果我设置为默认值,则始终为黑色;如果设置为lightContent,则始终为白色;如果我将UIViewControllerBasedStatusBarAppearance设置为Yes,则该视图控制器是否位于导航控制器堆栈中?我是说你推它还是展示它@GIOVANNIFILIPINITHE主界面是的,但是设置页面不是。这是我的故事板的图片:我更新了我的答案。如果这仍然不起作用,那么我不知道为什么抱歉:。另外,请确定您在UserDefault中的值,当您希望在运行时更新条形图样式时,请使用setNeedsStatusBarAppearanceUpdate。祝你好运