默认情况下,状态栏样式由视图控制器实例属性preferredStatusBarStyle控制。您只需要在视图控制器中重写preferredStatusBarStyle属性,即可更改状态栏样式以返回所需的样式。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
如果您的状态栏没有根据preferredStatusBarStyle中指定的值更改,请检查Info.plist中查看基于控制器的状态栏外观键(UIViewControllerBasedStatusBarAppearance),并确保将其设置为YES(true),代表View controller对status bar的设置优先级高于application的设置。或者您可以简单地删除这个外观键。(这个建是旧版本iOS7中的属性,现在基本上已经不用了)
如果您希望动态更改状态栏样式,例如根据当前页面滚动列表的滚动值进行更改样式。
由于preferredStatusBarStyle是一个只读属性,因此您无法直接设置样式,但您可以通过简单的变量和setNeedsStatusBarAppearanceUpdate()方法控制它
var isDarkContentBackground = false // <1>
func statusBarEnterLightBackground() { // <2>
isDarkContentBackground = false
setNeedsStatusBarAppearanceUpdate()
}
func statusBarEnterDarkBackground() { // <3>
isDarkContentBackground = true
setNeedsStatusBarAppearanceUpdate() <4>
}
override var preferredStatusBarStyle: UIStatusBarStyle {
if isDarkContentBackground { // <5>
return .lightContent
} else {
return .darkContent
}
}
如果您在动画块中调用setNeedsStatusBarAppearanceUpdate()方法,那么更改过程将一起动画化,并产生良好的褪色效果。
func statusBarEnterLightBackground() { //
isDarkContentBackground = false
UIView.animate(withDuration: 0.3) {
self.setNeedsStatusBarAppearanceUpdate()
}
}
func statusBarEnterDarkBackground() { //
isDarkContentBackground = true
UIView.animate(withDuration: 0.3) {
self.setNeedsStatusBarAppearanceUpdate()
}
}
参考文章:
https://sarunw.com/posts/how-to-set-status-bar-style/
https://blog.csdn.net/qq_18674153/article/details/50592021
https://www.cnblogs.com/niit-soft-518/p/5900130.html
https://www.hangge.com/blog/cache/detail_2272.html