我需要根据背景颜色(UINavigationController
自动执行的操作)更新每个视图控制器上的状态栏样式。
尝试过stackoverflow上描述的所有选项(View controller-based status bar appearance
中的info.plist
设置为YES),但没有一个对我有效。
我正在使用Xcode 10 beta 6和Swift 4.2,目标是iOS 12。
在View controller-based status bar appearance
中将NO
设置为info.plist
并在每个视图控制器中覆盖preferredStatusBarStyle
,如下所示:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
并在视图控制器中调用setNeedsStatusBarAppearanceUpdate()
(例如在viewDidLoad()
中)。
Swift 4.2,iOS 12
View controller-based status bar appearance
现在需要在YES
设置为info.plist
,因为UIKit不再希望我们通过UIApplication.shared
编辑状态栏样式 - 状态栏样式现在基于视图控制器。
然后,如果您希望在应用程序级别应用更改,只需在相应的容器视图控制器(最好是根)中覆盖preferredStatusBarStyle
...
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
...这将传播到所有视图控制器。如果要编辑每个视图控制器的状态栏样式,请对每个视图控制器应用此覆盖。
如果状态栏样式在运行时期间发生变化,则需要调用setNeedsStatusBarAppearanceUpdate()
(从容器/根视图控制器或特定视图控制器中的任何位置),否则不需要。
如果您在View controller-based status bar appearance
中将info.plist
设置为YES并且您的视图控制器嵌入到UINavigationController
中,那么您的导航控制器将负责更新条形样式(通过navigationController.navigationBar.barStyle
)并且preferredStatusBarStyle
属性将被忽略
我有Xcode 10.2,你发现将info.plist中基于View控制器的状态栏外观设置为“YES”根本不会改变状态栏样式。 但是,我确实发现更改info.plist文件中的两个键将完成将状态栏更改为亮或暗的所有工作,而无需任何其他编码。 这就是我为自己解决的问题 当将鼠标悬停在info.plist文件的顶行“信息属性列表”上时,将出现一个小圆“+”按钮。单击此按钮并滚动项目,直到找到以下键。 查看基于控制器的状态栏外观[将此值设置为] NO 状态栏样式[将此值设置为] UIStatusBarStyleLightContent 注意:UIStatusBarStyleLightContent在值列表中找不到可选项,必须在值框中键入。
我希望这可以帮助您或其他任何人寻找这个问题的答案。