iOS管理StatusBar

作者: 王技术 | 来源:发表于2016-09-08 21:25 被阅读0次

    本文介绍iOS7以后怎么轻松管理StatusBar.
    (如果公司让你整iOS6的,我觉得可以换工作了,这公司跟不上时代啊)

    iOS中的StatusBar有两种样式,分别是UIStatusBarStyleDefault(黑色)和UIStatusBarStyleLightContent(白色),如下图:
    UIStatusBarStyleDefault UIStatusBarStyleLightContent
    • UIApplication来控制StatusBar

    对于StatusBar我习惯使用ViewController来管理,苹果在iOS7以后也默认交给ViewController来管理
    如果非得要用application来整,则需要在Info.plist里面设置View controller-based status bar appearance为NO.
    然后可以调用以下代码来设置StatusBar:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];//设置模式
    [[UIApplication sharedApplication] setStatusBarHidden:YES];//设置隐藏
    
    • ViewController便捷(一行搞定)控制StatusBar

    若要使用ViewController来管理StatusBar
    需要在Info.plist里面设置View controller-based status bar appearance为YES.
    或者不做任何设置,则默认是ViewController来管理
    当然,这个ViewController的window的根控制器,不是随便一个ViewController能搞的(iOS9以后,window必须要有一个根控制器,不然会报红)
    在需要改变StatusBar的控制里面实现以下方法:

    //控制StatusBar是否隐藏
    - (BOOL)prefersStatusBarHidden
    {
        return YES;
    }
    //控制StatusBar显示模式
    - (UIStatusBarStyle)preferredStatusBarStyle
    {
        return UIStatusBarStyleLightContent;
    }
    
    • 注意
      这两个方法是由系统来调用(自己调用不好使)
      所以我们要通知系统,我们更改了StatusBar的样式
      让系统调用这两个方法重新获取StatuBar的样式:
    [self setNeedsStatusBarAppearanceUpdate];
    //这个和UIView的setNeedsDisplay原理差不多(调用UIView对象的setNeedsDisplay方法后,系统会在下次页面刷新时,调用重绘该view
    

    当我们调用setNeedsStatusBarAppearanceUpdate时
    系统会调用application.window的rootViewController的preferredStatusBarStyle方法
    我们的程序里一般都是用UINavigationController做root
    如果是这种情况
    那我们自己的UIViewController里的preferredStatusBarStyle根本不会被调用
    这时候我们要子类化一个UINavigationController
    在这个子类里面重写childViewControllerForStatusBarStyle方法
    如下

    - (UIViewController *)childViewControllerForStatusBarStyle:
    

    上面代码的意思就是说,不要调用我自己(就是UINavigationController)的preferredStatusBarStyle方法
    而是去调用navigationController.topViewController的preferredStatusBarStyle方法
    这样写的话就能保证当前显示的UIViewController的preferredStatusBarStyle方法能影响statusBar的前景部分

    • 关于StatusBar的一些其他设置方式

    1.设置程序启动时StatusBar是否隐藏:
    可以在Info.plist 里面设置status bar is initially hidden为YES
    也可以设置general:


    启动时隐藏.png

    2.设置程序启动时StatusBar颜色:
    可以在Info.plist 里面设置Status bar style
    也可以设置general:


    设置启动BarStyle.png

    感谢阅读
    你的支持是我写作的唯一动力

    相关文章

      网友评论

        本文标题:iOS管理StatusBar

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