iOS开发之状态栏statusBar颜色变化

             在网上搜索了很久,我也试了很多种情况,下面我为每种情况排布一下优先级,刚开始的时候我没有写播放器,使用的是腾讯的SDK,发现我之前设置的状态栏变化不在发生变化啦,所以在这里做一个小结,Xcode默认的颜色是黑色,记录优化代码的点滴

第一种:

如果其他界面默认都是黑色的,只有几个个别的界面需要白色的花,最简单的方法就是

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    
    self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
    
}


- (void)viewDidDisappear:(BOOL)animated{
    [super viewDidDisappear:animated];
    self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
}

在需要的地方设置就可以啦

第二种:

使用

- (UIStatusBarStyle)preferredStatusBarStyle {

    return UIStatusBarStyleLightContent;

}

方法改变状态栏颜色

有导航条的时候,单独使用

- (UIStatusBarStyle)preferredStatusBarStyle {

    return UIStatusBarStyleLightContent;

} 是不起作用的,必须配合

- (UIViewController *)childViewControllerForStatusBarStyle{

    return self.topViewController;

}使用

[self setNeedsStatusBarAppearanceUpdate];   这行代码是刷新状态栏

- (UIStatusBarStyle)preferredStatusBarStyle {
    
    
    if (self.scrollOffect < - _headerHeight + NavBarHeight) {
         return UIStatusBarStyleLightContent;
    }
    
    return   UIStatusBarStyleDefault;
    
   
}

刷新:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    CGFloat yOffset = scrollView.contentOffset.y;
    
    self.scrollOffect = yOffset;
    
    [self setNeedsStatusBarAppearanceUpdate];
    
     
}

就可以动态更新状态栏的颜色啦

⚠️注意,这种写法影响第一种写法,使用这种写法第一种情况是失效的,小萌当时用的就是第一种写法腾讯sdk用的第二种就出错啦

第三种:如果需要大多数界面都是白色的话可以全局设置

这两个要一起使用,在info.plist中 View controller-based status bar appearance   设为 NO,这样默认的状态栏就是白色的啦,并且第一种情况是失效的

⚠️注意  设置之后第一种情况和第二种情况都是失效的,优先级也是最高的,开发伙伴们灵活应用

发布了82 篇原创文章 · 获赞 93 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/sun_cui_hua/article/details/82350268