工程配置中设置启动时状态栏样式
首先可以发现在工程配置的TARGETS->General
中有Status Bar Style
设置的样式
在General
中设置Status Bar Style
的样式(如下图),这个设置是App启动的时候的样式。

代码中设置状态栏样式
代码中设置状态栏样式需要在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,
状态栏首先受navigationbar
的barStyle
影响,barStyle
设置为UIBarStyleBlack
时状态栏颜色为白色,barStyle
设为UIBarStyleDefault
(默认状态)时状态栏前景颜色为黑色。
然后如果你在ViewController
中重写了
override var preferredStatusBarStyle: UIStatusBarStyle {
get {
return .lightContent
}
}
则会显示成你重写赋值的状态颜色。如果你在ViewController
中没有重写上面的方法,则会恢复到默认的样式。
如果你的ViewController
在UINavigationController
包着,则需要在你自定义继承系统的UINavigationController
中重写此方法
open override var childViewControllerForStatusBarStyle: UIViewController? {
get {
return self.topViewController
}
}
或者写个扩展
extension UINavigationController {
open override var childViewControllerForStatusBarStyle: UIViewController? {
get {
return self.topViewController
}
}
}
网友评论