Ios 如何更改状态栏的外观?
我正试图根据Userdefaults更改here状态栏的外观,Userdefaults检测用户是否打开了模式,但使用setNeedsStatusBarAppearanceUpdate无法工作。我将默认状态栏设置为灯光。 这是我当前使用的代码: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
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。祝你好运