美文网首页iOS Tips
iOS.Tips - statusBar 改变 style 和显

iOS.Tips - statusBar 改变 style 和显

作者: Fade丶Mao | 来源:发表于2017-02-07 18:40 被阅读0次

preferredStatusBarStyle 和 UIApplication

在几个月前或者更早之前,本人一直使用

[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];

的方式来设置 statusBar 的颜色效果,但自从出现了下方图片中的警告后,果断替换成用 preferredStatusBarStyle 来设置 statusBar。

iOS 9之后,这样的方式不适用了
按住 command 点击方法 preferredStatusBarStyle 查看 API:
preferredStatusBarStyle 和 prefersStatusBarHidden
preferredStatusBarStyle 方法在 iOS 7 就有了。要使用这个方法,需要在 info.plist 里设置 View controller-based status bar appearance 为 YES,之后在对应的 viewController 内设置:
- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

preferredStatusBarStyle 会在页面显示前,或者说在生命周期 viewDidLoadviewWillAppear 方法之前调用一次,如果需要在一个 viewController 中动态改变 statusBarStyle 或者 隐藏/显示 statusBar( prefersStatusBarHidden ),使用

[self setNeedsStatusBarAppearanceUpdate];

来调用一次 preferredStatusBarStyleprefersStatusBarHidden

preferredStatusBarStyle 和 navigationController

有的同学在 viewController 中写了 preferredStatusBarStyle,却没有调用,这是因为如果 viewController 有一个 navigationController,那 viewController 在显示或者调用了 setNeedsStatusBarAppearanceUpdate 时便不会进入自己的 preferredStatusBarStyle 方法里,而是先进入 navigationController 的 preferredStatusBarStyle 中。此时如果需要 viewController 的有效,需要在 navigationController 中加上

- (UIViewController *)childViewControllerForStatusBarStyle {
    return self.topViewController;
}

这样就会以当前 navigationController.topViewControllerpreferredStatusBarStyle 返回值作为应该显示的 statusBarStyle。

preferredStatusBarStyle 和 runtime

其实 preferredStatusBarStyle 与 runtime 结合食用效果更佳(适用于大部分页面 statusBarStyle 一致,小部分需要调整),这样就不需要在每个需要调整的页面都写一次 preferredStatusBarStyle,在开发迭代过程中也会方便很多,记住 ,DRY 原则。

总结

欢迎交流~
补充代码地址

相关文章

网友评论

    本文标题:iOS.Tips - statusBar 改变 style 和显

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