美文网首页UI
关于 preferredStatusBarStyle

关于 preferredStatusBarStyle

作者: 无尾鱼啊哈哈哈 | 来源:发表于2017-11-03 10:43 被阅读12次

    有这样一种情况。做开发的时候有一种需求,就是导航栏的颜色是固定黑色或白色。大家都会做统一设置,但是有一种需求是导航栏默认是白色但是某一个页面需要黑色,你们会怎么做呢?看完这篇文章你就懂了

    typedef NS_ENUM(NSInteger, UIStatusBarStyle) {
    UIStatusBarStyleDefault
    UIStatusBarStyleLightContent
    }

    作用:

    切换状态栏风格,目前只有黑白两种(废话。。)
    

    问题: 谁可以来切换? 如何切换?

    先说一下都可以由哪些角色切换状态吧。

    1、UIApplication
    2、UINavigationController
    3、UIViewController
    
    什么时候由谁来管理呢?这里我们要考虑以下几种情况:
      一、info.plist 设置 View controller-based status bar style appearance = NO;
      二、有导航控制器
    
    先来讨论简单的:
    View controller-based status bar style appearance = NO
    其实就是把状态栏的控制权交由 UIApplication 这个类,这个时候只由它来统一管理。
    代码:
      [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent
      so easy!!!
    
    再来讨论有导航控制器的情况:
    首先,肯定是设置 View controller-based status bar style appearance = YES,这样就把控制权交由视图控制器了。
    那到底是交给 UINavigationController 还是 UIViewController呢? 其实也很简单, 有导航控制器的情况就交给 UINavigationController, 没有则由 UIViewController 来管理。代码 :
    有导航控制器,在 UINavigationController 内添加方法
    - (UIStatusBarStyle)preferredStatusBarStyle
    {
        return UIStatusBarStyleLightContent;
    }
     没有导航控制器,则把以上代码在 UIViewController 内。
    
    那还有一种情况,就是导航控制器但是又想让 UIViewController 来管理,怎么办呢?其实UINavigationController有一个方法可以把状态栏的控制器交给UIViewController就是:
    - (UIViewController *)childViewControllerForStatusBarStyle
    {
        return self.visibleViewController;
    }
    这样,即使有导航控制器,也可以让UIViewController来管理啦!!
    
    下面直接上一章图吧:
    WX20171103-140046.png

    相关文章

      网友评论

        本文标题:关于 preferredStatusBarStyle

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