设置状态栏样式

工程配置中设置启动时状态栏样式

首先可以发现在工程配置的TARGETS->General中有Status Bar Style设置的样式
General中设置Status Bar Style的样式(如下图),这个设置是App启动的时候的样式。

General

代码中设置状态栏样式

代码中设置状态栏样式需要在info.plist文件中添加
View controller-based status bar appearance 这个字段,
这个字段是个BOOL值。下面根据此字段YES or NO添加不同的代码使状态栏更改。

View controller-based status bar appearance 设为NO:

如果将View controller-based status bar appearance设置为NO,则应用启动完成后(也就是闪屏后),状态栏样式将和启动时的样式保持一致,如果选中了Hide status bar,则在应用中需要UIApplication.shared.isStatusBarHidden = false才会显示设置的状态栏样式。
在应用中可通过UIApplication.shared.statusBarStyle设置:

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        UIApplication.shared.statusBarStyle = .default
        UIApplication.shared.isStatusBarHidden = false
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        UIApplication.shared.statusBarStyle = .lightContent
    }

View controller-based status bar appearance 设为YES:

如果将View controller-based status bar appearance设置为YES,
状态栏首先受navigationbarbarStyle影响,barStyle设置为UIBarStyleBlack时状态栏颜色为白色,barStyle设为UIBarStyleDefault(默认状态)时状态栏前景颜色为黑色。
然后如果你在ViewController中重写了

    override var preferredStatusBarStyle: UIStatusBarStyle {
        get {
            return .lightContent
        }
    }

则会显示成你重写赋值的状态颜色。如果你在ViewController中没有重写上面的方法,则会恢复到默认的样式。
如果你的ViewControllerUINavigationController包着,则需要在你自定义继承系统的UINavigationController中重写此方法

    open override var childViewControllerForStatusBarStyle: UIViewController? {
        get {
            return self.topViewController
        }
    }

或者写个扩展

extension UINavigationController {
    open override var childViewControllerForStatusBarStyle: UIViewController? {
        get {
            return self.topViewController
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容