状态栏字体颜色
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.plist
中View controller-based status bar appearance = NO
当使用这种设置时改变状态栏只有一种方法
UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent
UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
如果单个页面需要改变颜色可以在viewWillAppear
和viewWillDisappear
中改变
iOS9之后
在info.plist
中View 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
上面的方法可以穿透这个设置从而改变状态栏颜色
网友评论