NavigationController中UIStatusBar状态修改

最近项目中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
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
    }

这样就翻转屏幕都能显示状态栏了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容