iOS中statusBar样式设置问题
需求:
整体Style 为lightContent样式,这些页面通常是navigationcontroller的子控制器,通常使用push方式;个别页面为default样式,这些页面使用present或push方法弹出。
App页面中的StatusBarStyle整体一个样式,个别页面一个样式时,实现方式有两种:
方法一
plist中设置
Status bar style
为lightContent
,设置View controller-based status bar appearance
为YES
扩展或在自定义navigationBarController中实现两个方法如下:
1
2
3
4
5
6
7override open var childForStatusBarHidden: UIViewController? {
return self.topViewController
}
override open var childForStatusBarStyle: UIViewController? {
return self.topViewController
}在基类BaseViewController(所有controller都继承的父Controller类)中实现:
1
2
3override var preferredStatusBarStyle: UIStatusBarStyle{
return .lightContent
}在个别需要default样式的页面中实现:
1
2
3override var preferredStatusBarStyle: UIStatusBarStyle{
return .default
}方法二
(因为UIApplication.shared.statusBarStyle
方法在iOS9后废弃(仍然可用),所以不推荐了)
- plist设置
Status bar style
为lightContent
,设置View controller-based status bar appearance
为NO
- 设置
UIApplication.shared.statusBarStyle = .lightContent
- 在基类BaseViewController中
viewWillAppear
里设置UIApplication.shared.statusBarStyle = .lightContent
- 在特殊样式的controller的
viewWillAppear
里设置UIApplication.shared.statusBarStyle = .default
(如果BaseViewController里没有设置,就在特殊样式的controller的viewWillDisappear
中还原设置)