StatusBarStyle到底该如何设置呢?状态栏随心所欲的改变文字颜色

状态栏字体颜色

public enum UIStatusBarStyle : Int {
    case `default` // Dark content, for use on light backgrounds 黑色
    @available(iOS 7.0, *)
    case lightContent // Light content, for use on dark backgrounds 白色
}

iOS9之前

info.plistView controller-based status bar appearance = NO

当使用这种设置时改变状态栏只有一种方法

UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent 
UIApplication.shared.statusBarStyle = UIStatusBarStyle.default

如果单个页面需要改变颜色可以在viewWillAppearviewWillDisappear中改变

iOS9之后

info.plistView controller-based status bar appearance = YES (此时UIApplication.shared.statusBarStyle无效)

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
override func viewDidLoad() {
        super.viewDidLoad()
        self.setNeedsStatusBarAppearanceUpdate()
}

当baseVC不是UIViewController而是UINavigationController时可以写一个BaseNavigationController然后重写

 override var preferredStatusBarStyle: UIStatusBarStyle {
        let topVC = self.topViewController
        return topVC?.preferredStatusBarStyle ?? .default
    }

这么做的原因是因为self.setNeedsStatusBarAppearanceUpdate()这个方法只调用了UINavigationController的
preferredStatusBarStyle而没有调用UIViewController的preferredStatusBarStyle上面的方法可以穿透这个设置从而改变状态栏颜色

当然也可以直接设置当前UINavigationController.navigationBar.barStyle的状态来改变状态栏颜色

你可能感兴趣的:(StatusBarStyle到底该如何设置呢?状态栏随心所欲的改变文字颜色)