我正在尝试根据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
}
但仅显示灯光状态栏
答案 0 :(得分:0)
在Info.plist中,将“基于View Controller的状态栏外观”设置为YES。如果将其设置为NO,则它将对所有视图控制器应用默认值。
将其设置为“ yes”后,可以使用它覆盖每个视图控制器中的外观:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
//or return .default
}
答案 1 :(得分:0)
尝试一下,它对我有用:
app/presenters/offers_presenter.rb
设置为UIViewControllerBasedStatusBarAppearance
覆盖YES
:
preferredStatusBarStyle
但是,如果此视图控制器嵌入在导航控制器中,则重写将被忽略,因此您必须改为使用以下代码:
override var preferredStatusBarStyle: UIStatusBarStyle {
return UserDefaults.standard.bool(forKey: "isDarkMode") ? .lightContent : .default
}
希望这会有所帮助