Fork me on GitHub

iOS状态栏操作

隐藏及显示问题

iOS开发中,我们一般不会操作状态栏,最多在启动图隐藏状态栏,其他全部是显示状态,但有少数App可能会有特殊需求,如:阅读类App。下面来讲一讲iOS状态栏的一些操作问题

方案总结

  • Info.plistStatus bar is initially hidden
  • Info.plistView controller-based status bar appearance

  • 使用代码全局设置

1
@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;
  • 使用代码单独控制器设置
1
(BOOL)prefersStatusBarHidden NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to NO

感觉各种方法特别乱,有一些可能是历史原因,如:UIApplication 全局设置的方法在iOS 9后已经不推荐使用。

操作方式

这里暂把代码全局设置的方式忽略不计。

  1. 启动界面的状态栏隐藏及显示(没有添加默认是 显示)
    Status bar is initially hidden YES隐藏 NO显示

  2. App界面状态栏隐藏及显示(没有添加默认是显示)
    View controller-based status bar appearance 的设置必须在 Status bar is initially hiddenYES
    YES显示 NO隐藏

  3. 在当个界面对状态栏隐藏及显示(没有添加默认是 显示)
    重写此方法,返回 YES隐藏 NO显示

    1
    2
    3
    - (BOOL)prefersStatusBarHidden {
    return YES;
    }

必须保证View controller-based status bar appearance 置为YES的情况下

情况分类和Demo

启动界面显示状态栏 + 全部界面显示状态栏

不做任何操作,默认即可 Demo

启动界面显示状态栏 + 全部界面隐藏状态栏

在Info.plist 加 View controller-based status bar appearanceYES

全部控制器重写prefersStatusBarHidden 返回YES Demo)

启动界面显示状态栏 + 界面自定义状态栏的显示和隐藏

在Info.plist 加 View controller-based status bar appearanceYES

在需要隐藏的控制器重写prefersStatusBarHidden 返回YES

在需要显示的控制器重写prefersStatusBarHidden 返回NO(或者不重写)Demo

启动界面隐藏状态栏 + 全部界面显示状态栏

在Info.plist 加 Status bar is initially hidden 设YES Demo

启动界面隐藏状态栏 + 全部界面隐藏状态栏

在Info.plist 加 Status bar is initially hidden 设YES

在Info.plist 加 View controller-based status bar appearance 设 NODemo

启动界面隐藏状态栏 + 界面自定义状态栏的显示和隐藏

在Info.plist 加 Status bar is initially hidden 设YES

在Info.plist 加 View controller-based status bar appearanceYES(或者不加)

在需要隐藏的控制器重写prefersStatusBarHidden 返回YES

在需要显示的控制器重写prefersStatusBarHidden 返回NO(或者不重写)
Demo

颜色问题

正在完善中…

- END -
关注微信公众号,发现更多精彩

文章作者:梁大红

特别声明:若无特殊声明均为原创,转载请注明,侵权请联系

版权声明:署名-非商业性使用-禁止演绎 4.0 国际