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的方法并不会调用。网上搜索了一下解决方法

NavigationController中UIStatusBar状态修改_第1张图片
Paste_Image.png

按照这个方法做还是不行。

二·

NavigationController中UIStatusBar状态修改_第2张图片
Paste_Image.png
NavigationController中UIStatusBar状态修改_第3张图片
Paste_Image.png

第二种方法中在UINavigationController扩展中重写了preferredStatusBarStyle方法,这是为什么呢?

这个方法默认返回值是nil。也就是当我们调用setNeedsStatusBarAppearanceUpdate的时候,系统会调用container(容器控制器)的preferredStatusBarStyle。也就是app.window.rootViewController的preferred的方法,一般我们用UINavigationController或者UITabBarController来做container,也就是根本不会调用子控制器(我们所看到的UIViewcontroller)的preferredStatusBarStyle方法。这个时候使用
-(UIViewController *)childViewControllerForStatusBarStyle:

按照第二种方法重写代码之后,结果发现还是没有效果,于是我去info.plist改变设置

NavigationController中UIStatusBar状态修改_第4张图片
Paste_Image.png

这样设置后 preferredStatusBarStyle就能成功调用了

但是这还没完,当我们横屏的时候,statusbar会隐藏掉,这时候我们还需要重写

override func prefersStatusBarHidden() -> Bool {
        return false
    }

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

你可能感兴趣的:(NavigationController中UIStatusBar状态修改)