最近项目中UI调整需要修改StatusBar的颜色,原来的方法
@available(iOS, introduced=2.0, deprecated=9.0, message="Use -[UIViewController preferredStatusBarStyle]")
public func setStatusBarStyle(statusBarStyle: UIStatusBarStyle, animated: Bool)
官方已经不推荐此方法了
于是按说明使用了
[UIViewController preferredStatusBarStyle]
一·
但是问题来了,当我们使用的ViewController是navigationController的子控制器的,我们在ViewController重写preferredStatusBarStyle的方法并不会调用。网上搜索了一下解决方法
按照这个方法做还是不行。
二·
Paste_Image.png Paste_Image.png第二种方法中在UINavigationController扩展中重写了preferredStatusBarStyle
方法,这是为什么呢?
这个方法默认返回值是nil。也就是当我们调用
setNeedsStatusBarAppearanceUpdate
的时候,系统会调用container(容器控制器)的preferredStatusBarStyle
。也就是app.window.rootViewController
的preferred的方法,一般我们用UINavigationController或者UITabBarController来做container,也就是根本不会调用子控制器(我们所看到的UIViewcontroller)的preferredStatusBarStyle方法。这个时候使用
-(UIViewController *)childViewControllerForStatusBarStyle:
按照第二种方法重写代码之后,结果发现还是没有效果,于是我去info.plist改变设置
Paste_Image.png这样设置后
preferredStatusBarStyle
就能成功调用了
但是这还没完,当我们横屏的时候,statusbar会隐藏掉,这时候我们还需要重写
override func prefersStatusBarHidden() -> Bool {
return false
}
这样就翻转屏幕都能显示状态栏了
网友评论