About StatusBar

知识普及

ios上状态栏 就是指的最上面的20像素高的部分
状态栏分前后两部分,要分清这两个概念,后面会用到:

  • 前景部分:就是指的显示电池、时间等部分;
  • 背景部分:就是显示黑色或者图片的背景部分;
    如下图:前景部分为白色,背景部分为黑色

注意:这里只涉及到ios7以及更高版本,低版本下面的讲解可能无效。

设置statusBar的【前景部分】

简单来说,就是设置显示电池电量、时间、网络部分标示的颜色,

  • 这里只能设置两种颜色:
    • 默认的黑色(UIStatusBarStyleDefault
    • 白色(UIStatusBarStyleLightContent
  • 可以设置的地方有两个:plist设置里面 和 程序代码里
    • plist设置statusBar
      在plist里增加一行 UIStatusBarStyle(或者是“Status bar style”也可以),这里可以设置两个值,就是上面提到那两个
      UIStatusBarStyleDefaultUIStatusBarStyleLightContent
      这样在app启动的launch页显示的时候,statusBar的样式就是上面plist设置的风格。

    • 程序代码里设置statusBar

UIViewController也增加了几个接口,用来做设置

综述:status bar以下简称SB

|决定SB样式|决定是否隐藏SB| 调用处|
|:|:|:|
|preferredStatusBarStyle|prefersStatusBarHidden| 在实际需要显示SB的VC中调用|

|决定SB在哪个VC生效样式|决定SB在哪个VC隐藏|调用处|
|:|:|:|
|childViewControllerForStatusBarStyle|childViewControllerForStatusBarHidden|container或者说parentVC|

|决定SB生效更新时机|决定SB隐藏生效时机|调用处|
|:|:|:|
|setNeedsStatusBarAppearanceUpdate|setNeedsStatusBarAppearanceUpdate|container/调度处|

逐一说明

  • -(UIStatusBarStyle)preferredStatusBarStyle:
    在你自己的UIViewController里重写此方法,返回你需要的值(UIStatusBarStyleDefault 或者 UIStatusBarStyleLightContent);
  • -(BOOL)prefersStatusBarHidden
    决定你的status bar 是否隐藏!

注意:

如果在该UIViewController已经在显示在当前,你可能还要在当前页面不时的更改statusBar的前景色,那么,你首先需要调用下面的setNeedsStatusBarAppearanceUpdate方法(这个方法会通知系统去调用当前UIViewController的preferredStatusBarStyle方法), 这个和UIView的setNeedsDisplay原理差不多(调用UIView对象的setNeedsDisplay方法后,系统会在下次页面刷新时,调用重绘该view,系统最快能1秒刷新60次页面,具体要看程序设置)。

  • -(UIViewController *)childViewControllerForStatusBarStyle
  • -(UIViewController *)childViewControllerForStatusBarHidden
    先来看代码原文注释的解读:
    重写,用于返回一个child view 或 nil.
    • 非空,那么返回的那个child view的 status bar就会被调用到。
    • 为空,调用当前(container)自身的status bar
      不论返回值如何变化,都必须调用 setNeedsUpdatedStatusBarAttributes方法
      这个接口也很重要,默认返回值为nil。当我们调用setNeedsStatusBarAppearanceUpdate时,系统会调用application.window的rootViewController的preferredStatusBarStyle方法。

TIPS:若程序里用UINavigationController做root,如果是这种情况,那我们自己的UIViewController里的preferredStatusBarStyle根本不会被调用;

  • -(void)setNeedsStatusBarAppearanceUpdate:
    StatusBar 在需要隐藏或改变样式时在UIViewConroller中调用

下面用一幅图来直观的解释

TIPS: 注意三个函数各自调度的时机和地点。prefer 是调用哪个VC就在哪个VC中去设置(这很好理解,我要调用你了你就告诉我你是什么样式,是否隐藏)

Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容