美文网首页
设置状态栏样式

设置状态栏样式

作者: loongod | 来源:发表于2017-12-14 18:55 被阅读78次

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

首先可以发现在工程配置的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
        }
    }
}

相关文章

网友评论

      本文标题:设置状态栏样式

      本文链接:https://www.haomeiwen.com/subject/rsqlwxtx.html