一、在iOS7之后,系统默认将状态栏交给Controller管理,如果想要改回UIApplication来控制,则需要配置info文件的:View controller-based status bar appearance 为 NO 。
用 UIApplication 来管理 可作用于全局, 比较方便。修改也全局修改
用 Controller 来管理 也可以在根 UINavigationController(或者Controller) 里全局设置,
缺点是:超出了UINavigationController 范围就变回默认的颜色,例如下面第二条。
优点是:在来回切换Controller 改变 颜色比较方便,
1、UIApplication 控制:
UIApplication.shared.statusBarStyle = .lightContent
2、Controller 控制: 需要注意的是, 要在合适的位置添加: setNeedsStatusBarAppearanceUpdate() 更新状态
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
示例:
override var preferredStatusBarStyle: UIStatusBarStyle {
if searchController.isActive {
return .default
}else {
return .lightContent
}
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
setNeedsStatusBarAppearanceUpdate()
}
二、有些例外的, 比如我用 Controller 来管理状态栏,而且设置默认颜色为白色, 但是我还有一个新的 window 上面有弹窗提示信息, 但是在弹窗的时候 状态栏就会变回默认的黑色, 怎么解决这个问题呢?
1、方法很简单:直接在新建的window上添加一个 rootviewcontroller , 在对应的控制器里设置状态栏的颜色就可以了
2、但是状态栏和window 默认是隐藏的, 所以在修改颜色的同时也需要 把状态栏的hidden 设为false
示例:
class StatusBarController: UIViewController {
override var prefersStatusBarHidden: Bool {
return false
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}