美文网首页APP & program
iOS开发 动态修改状态栏颜色

iOS开发 动态修改状态栏颜色

作者: 我是卖报的小行家 | 来源:发表于2022-06-23 15:31 被阅读0次

    关于状态栏UIStatusBarStyle

    状态栏有以下几种显示风格:
    1.UIStatusBarStyleDefault
    2.UIStatusBarStyleLightContent
    API_AVAILABLE(ios(7.0))
    3.UIStatusBarStyleDarkContent
    API_AVAILABLE(ios(13.0))
    4.UIStatusBarStyleBlackTranslucent API_DEPRECATED_WITH_REPLACEMENT("UIStatusBarStyleLightContent", ios(2.0, 7.0)) = 1,
    5.UIStatusBarStyleBlackOpaque API_DEPRECATED_WITH_REPLACEMENT("UIStatusBarStyleLightContent", ios(2.0, 7.0)) = 2,
    UIStatusBarStyleLightContent 的背景颜色加载方法

    UIView *statusBar = [[UIView alloc] initWithFrame:
    CGRectMake(0, -20, self.view.frame.size.width, 20)];
    statusBar.backgroundColor = myColor;
    [self.navigationController.navigationBar addSubview:statusBar];
    

    我们想要改变状态栏样式只需要在viewController里面重载preferredStatusBarStyle方法即可

    - (UIStatusBarStyle)preferredStatusBarStyle
    {
        return UIStatusBarStyleLightContent;
    }
    

    如何调用preferredStatusBarStyle方法呢

     [self setNeedsStatusBarAppearanceUpdate];
    //让其强制刷新 有些类似于 view的layoutIfNeeded方法
    

    当我们调用setNeedsStatusBarAppearanceUpdate时,系统会调用application.window.rootViewController的preferredStatusBarStyle方法,而不是当前控制器的preferredStatusBarStyle方法。在这个时候,一个重要的方法就要派上用场了,那就是:childViewControllerForStatusBarStyle。

    childViewControllerForStatusBarStyle默认返回nil。所以我们需要重写这个方法。
    加入跟试图控制器是navigationController,那么,我们需要重写childViewControllerForStatusBarStyle

    那么,我们子类化一个导航控制器ZXNavigationController,重写它的childViewControllerForStatusBarStyle方法:

    @implementation ZXNavigationController
    
    - (UIViewController *)childViewControllerForStatusBarStyle
    {
        return self.topViewController;
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    }
    

    提示:首先info.plist添加
    View controller-based status bar appearance 将其设置为YES
    如果设置为NO则不能手动对状态栏样式进行修改

    部分内容转载于https://www.cnblogs.com/sundaysgarden/articles/9194636.html

    相关文章

      网友评论

        本文标题:iOS开发 动态修改状态栏颜色

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