iOS 动态修改状态栏风格

App 中经常需要根据页面的风格改变电池栏文字的颜色,记录一下都是如何调整的。

  • UIStatusBarStyle 的样式
  • 改变状态栏文字颜色的方式
  • 状态栏的显示和隐藏

UIStatusBarStyle 的样式

iOS 13.0 中新增了暗黑模式,对应的状态栏风格也增加了一个 darkContent

1
2
3
4
5
6
7
public enum UIStatusBarStyle : Int {  
case default = 0 // Automatically chooses light or dark content based on the user interface style
@available(iOS 7.0, *)
case lightContent = 1 // Light content, for use on dark backgrounds
@available(iOS 13.0, *)
case darkContent = 3 // Dark content, for use on light backgrounds
}

改变状态栏文字的颜色

是否可以在不同页面设置不同的风格,首先要配置好 Info.plist 中的

1
View controller-based status bar appearance

属性,默认为 YES

  • 如果整个应用只需要使用固定的风格,上述属性改为 NO。在应用配置或者代码中设定好风格即可。
  • 如果状态栏颜色需要视页面而定,上述属性改为 YES,并且重写控制器的 preferredStatusBarStyle 方法。

对于需要调整 ViewController 风格的页面,我们重写它的 getter,这是一个 只读 的属性。

1
2
3
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}

当然如果导航控制器重写了这个方法,它的子控制器都会以 导航控制器 的为准。如果子控制器中有需要改变风格的,同样也需要自己实现这个方法。

状态栏的显示和隐藏

  • 全局隐藏的话,很简单,直接改配置。
  • 部分页面隐藏,同上,重写~~
1
2
3
override var prefersStatusBarHidden: Bool {
return true
}