ios statusbar 控制

只讨论 iOS Version >= 7.0

1、info.plist 设置

open as sources code

1
2
<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>

或者

open as property list

1
View controller-based status bar appearance  YES

2、ViewController containers add Extension/SubClass

一般我们用UINavigationController或者UITabBarController来做Container,当存在 UINavigationController或者UITabBarController 时,系统只会调用Container的方法,而忽略ViewController 的方法。 所以我们需要为Container添加Extension,或者子类。

1
2
3
4
5
6
open override var childViewControllerForStatusBarStyle: UIViewController? {
return self.topViewController
}
open override var childViewControllerForStatusBarHidden: UIViewController? {
return self.topViewController
}

3、ViewControllers add setting method

三个分别设置 style hidden animation 的方法

1
2
3
4
5
6
7
8
9
10
11
override var preferredStatusBarStyle: UIStatusBarStyle {
return .default // .lightContent
}

override var prefersStatusBarHidden: Bool {
return true // false
}

override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return .fade // .none .slide
}

4、Update statusBar when vc has appeared

当控制器已经出现的时候需要修改时,调用下面的方法即可。

1
2
3
4
5
6
7
func updateStatusBarStyle() {
self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
return self.statusBarStyle
}