1.在 info.plist中添加
View controller-based status bar appearance : YES
2.新建一个继承于UINavigationController的子类,并实现如下方法
override var childForStatusBarHidden: UIViewController? {
return self.topViewController
}
override var childForStatusBarStyle: UIViewController? {
return self.topViewController
}
3.在需要隐藏statusBar的ViewController中实现方法
override var prefersStatusBarHidden: Bool {
return true
}
关于为什么要重写childForStatusBarHidden和childForStatusBarStyle两个属性:
这两个属性默认返回值为nil。
当调用setNeedsStatusBarAppearanceUpdate的时候,系统会调用Container(容器控制器)的preferredStatusBarStyle这个方法(window?.rootViewController的preferred的方法,一般我们用UINavigationController或者UITabBarController来做Container),也就是根本不会调用子控制器(我们所看到的UIViewcontroller)的preferredStatusBarStyle方法。
重写了childForStatusBarHidden和childForStatusBarStyle后,这两个属性返回的都是当前展示的controller,则调用的statusBarStyle就是当前controller重写的preferredStatusBarStyle了。
网友评论