vicki753's iOS 基础 - 状态栏的颜色设置

首先了解navBar的style是会影响状态栏颜色的

self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
// UIBarStyleDefault 状态栏会显示黑色, UIBarStyleBlack 状态栏显示白色,而且,注意这样的设置,深色模式的动态颜色也是有效果的,UIBarStyleBlack 会显示深色模式的颜色,但可能是系统bug,深色模式后它也不会根据当前是浅色模式而去改变颜色,它会认为你就是需要深色模式self.navigationController.navigationBar.barTintColor = kDEEP_BLUE_COLOR;
kDEEP_BLUE_COLOR 是动态颜色,浅色模式是蓝色,深色模式是深灰色,因为UIBarStyleBlack的设置,在navbar隐藏后,再显示出来的时候它就显示为 深灰色

执行顺序也会影响设置的状态栏颜色

如果是系统的方法先走(黑色),页面的方法后走(白色),就会遵循页面的方法(白色),反之则会相反


Screen Shot 2020-07-21 at 11.30.55 AM.png

这个是app启动后的堆栈 我在BSMyAccountViewController中打了断点,并且发现这个方法调用了好几次

- (UIStatusBarStyle)preferredStatusBarStyle {
      return UIStatusBarStyleLightContent;
}

点击进入这个页面的时候都会执行这个方法 preferredStatusBarStyle,
这个设置比较方便,因为不需要改变其他的代码,但是除非系统的导航栏隐藏了才会有效果

还有一种比较靠谱的设置方法

  • 在工程里的info.plist 文件中添加一项配置

View controller-based status bar appearance 设置为NO (不要YES,YES就无效了)

  • 全局就设置在appDelegate里面,或者你其他基类
    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

  • 特定的页面就用

    - (void)viewDidAppear:(BOOL)animated {
       [super viewDidAppear:animated];
           // 设置状态栏为白色
       [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
    }
    
     - (void)viewWillDisappear:(BOOL)animated {
         [super viewWillDisappear:animated];
       // 设置状态栏为默认色 
        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
    }
    

你可能感兴趣的:(vicki753's iOS 基础 - 状态栏的颜色设置)