iOS-有效控制StatusBar样式
环境
Xcode 13.4
前言
有些项目会存在不同NavigationBar颜色不一致的场景,进而需要对StatusBar颜色进行特殊定制,而有时我们明明使用了自以为正确的方式,却达不到目标效果。那是因为,相同的方式在不同配置下,体现的效果不一致,因此理清StatusBar的各种设置很重要。
Info.plist关于StatusBar的Key介绍
一、UIStatusBarStyle (Status bar style)
状态栏风格,指定状态栏内容显示风格。
值 | UIStatusBarStyleDefault | UIStatusBarStyleDarkContent | UIStatusBarStyleLightContent |
---|---|---|---|
StatusBar样式 | 黑色内容(默认) | 黑色内容(iOS13以上) | 白色内容 |
二、UIViewControllerBasedStatusBarAppearance (View controller-based status bar appearance)
是否支持UIViewController
通过重写preferredStatusBarStyle
来指定当前控制器的StatusBar样式。
值 | NO | YES |
---|---|---|
StatusBar样式 | 由UIStatusBarStyle 统一决定 |
由当前UIViewController 的preferredStatusBarStyle 决定 |
注意:
如果根控制器是UITabBarController
,StatusBar样式
取决于当前选中的控制器;
如果当前选中的控制器是UINavigationController
,可以通过继承UINavigationController
并重写preferredStatusBarStyle
来分发到子ViewController
,实现由ViewController
控制StatusBar样式
。
三、UIStatusBarHidden (Status bar is initially hidden)
启动时StatusBar是否隐藏。
值 | NO | YES |
---|---|---|
效果 | 启动时显示StatusBar
|
启动时隐藏StatusBar
|
注意:
只控制启动页时是否隐藏,其他页面需通过重写prefersStatusBarHidden
来控制是否隐藏。
统一StatusBar样式
首先在Info.plist中添加UIViewControllerBasedStatusBarAppearance
,值设为NO
;
接着在Info.plist中添加UIStatusBarStyle
,值设为你想要的样式即可。
不同的ViewController各自指定StatusBar样式
首先在Info.plist中添加UIViewControllerBasedStatusBarAppearance
,值设为YES
(Xcode 13.4 默认不添加该Key
也有同样效果);
然后在各个ViewController
重写prefersStatusBarHidden
并返回想要的样式。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
iOS 9.0废弃的API
现在的项目基本不会兼容那么老的系统了,旧的API不要再使用了。