参考:

https://www.jianshu.com/p/e57715cf2f8a

 

一. 设置全局控制器状态栏样式

1.取消控制器管理状态栏样式,在Supporting Files下的Info.plist添加一个属性设置

 value: NO```

![image.png](http://upload-images.jianshu.io/upload_images/1533163-ba52dbf85ed4be15.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2.通过UIApplication来管理统一管理状态栏的样式,设置如下:
`UIApplication.shared.statusBarStyle = .lightContent`
####二. 设置局部控制器状态栏样式
新建项目默认通过局部控制器状态栏样式来管理,所以info.plist不需要做任何设置
1.如果只是`UIViewController`的话,只需要重写`preferredStatusBarStyle`方法

 

override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}

 

2.如果`UIViewController`存在`UINavigationController`,需要在自定义`NavigationController`中重写`preferredStatusBarStyle`方法

 

override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}

 

3.如果`UIViewController`存在`UINavigationController`,又想要通过`rootViewController`来控制`UIStatusBarStyle`,则需要在自定义`NavigationController`重写`childViewControllerForStatusBarStyle`方法
override var childViewControllerForStatusBarStyle: UIViewController?{
return self.topViewController
}

`rootViewController`重写`preferredStatusBarStyle`方法

override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}

4. 对于有导航栏的VC只用拓展也阔以,效果 = 方法3
extension UINavigationController {
    
    /// 设置导航栏背景颜色
    ///
    /// - Parameter color: 设置的颜色
    func setNavBarBackGroundColor(color: UIColor) {
        self.navigationBar.barTintColor = color
        ///
        if color == UIColor.white{
            self.navigationBar.barStyle = .default
        }else if color == main_tinColor{
            self.navigationBar.barStyle = .black
        }
    }

5. 但是 如果某个VC隐藏了导航栏

直接使用 代码就会生效

    override var preferredStatusBarStyle: UIStatusBarStyle{
        return .lightContent
    }

 

 
posted on 2020-07-09 09:15  懂事长qingzZ  阅读(366)  评论(0编辑  收藏  举报