在我的info.plist文件中,我将基于控制器的View状态栏外观设置为YES
我有一个隐藏状态栏的FirstViewController.
在我的SecondViewController中
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } override var prefeRSStatusBarHidden: Bool { return false } override func viewDidLoad() { super.viewDidLoad() setNeedsStatusBarAppearanceUpdate() }
如何让它正确更新?谢谢
编辑:
AppDelegate.swift也有这个
didFinishLaunchingWithOptions中的UIApplication.shared.statusBarStyle = .lightContent
解决方法
当您的视图控制器是导航控制器的子节点时,有关如何管理状态栏样式的问题有很多误解.
您的子视图控制器可以实现preferredStatusBarStyle,如果导航栏被隐藏,这将正常工作.
如果显示导航栏,导航控制器将根据导航栏的barStyle设置状态栏样式 – 如果栏样式为.default,则设置为.default;如果栏样式为.black,则设置为.lightContent.因此,当导航栏显示时,视图控制器设置状态栏样式的正确方法是设置导航控制器的导航栏样式.
显而易见的地方是viewWillAppear,只要此视图控制器成为导航控制器堆栈的顶部,就会调用它:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.navigationBar.barStyle = .black // or .default }