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统一决定 由当前UIViewControllerpreferredStatusBarStyle决定

注意:
如果根控制器是UITabBarControllerStatusBar样式取决于当前选中的控制器;
如果当前选中的控制器是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不要再使用了。

你可能感兴趣的:(iOS-有效控制StatusBar样式)