美文网首页
NavigationController中UIStatusBar

NavigationController中UIStatusBar

作者: 806349745123 | 来源:发表于2016-08-27 13:56 被阅读26次

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

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

相关文章

网友评论

      本文标题:NavigationController中UIStatusBar

      本文链接:https://www.haomeiwen.com/subject/xpxtettx.html