美文网首页
vicki753's iOS 基础 - 状态栏的颜色设置

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

作者: vicki753 | 来源:发表于2020-07-21 14:13 被阅读0次

    首先了解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 基础 - 状态栏的颜色设置

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