如何更改状态栏样式 - iOS 12

问题描述 投票:11回答:4

我需要根据背景颜色(UINavigationController自动执行的操作)更新每个视图控制器上的状态栏样式。

尝试过stackoverflow上描述的所有选项(View controller-based status bar appearance中的info.plist设置为YES),但没有一个对我有效。

我正在使用Xcode 10 beta 6和Swift 4.2,目标是iOS 12。

ios swift ios12
4个回答
18
投票

View controller-based status bar appearance中将NO设置为info.plist并在每个视图控制器中覆盖preferredStatusBarStyle,如下所示:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

并在视图控制器中调用setNeedsStatusBarAppearanceUpdate()(例如在viewDidLoad()中)。


24
投票

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()(从容器/根视图控制器或特定视图控制器中的任何位置),否则不需要。


6
投票

如果您在View controller-based status bar appearance中将info.plist设置为YES并且您的视图控制器嵌入到UINavigationController中,那么您的导航控制器将负责更新条形样式(通过navigationController.navigationBar.barStyle)并且preferredStatusBarStyle属性将被忽略


3
投票

我有Xcode 10.2,你发现将info.plist中基于View控制器的状态栏外观设置为“YES”根本不会改变状态栏样式。 但是,我确实发现更改info.plist文件中的两个键将完成将状态栏更改为亮或暗的所有工作,而无需任何其他编码。 这就是我为自己解决的问题 当将鼠标悬停在info.plist文件的顶行“信息属性列表”上时,将出现一个小圆“+”按钮。单击此按钮并滚动项目,直到找到以下键。 查看基于控制器的状态栏外观[将此值设置为] NO 状态栏样式[将此值设置为] UIStatusBarStyleLightContent 注意:UIStatusBarStyleLightContent在值列表中找不到可选项,必须在值框中键入。 info.plist

我希望这可以帮助您或其他任何人寻找这个问题的答案。

© www.soinside.com 2019 - 2024. All rights reserved.