IOS状态栏设置(UIStatusBar)

状态栏

状态栏分为两个部分:
1.显示部分:时间、电池、运营商等的显示部分;
2.背景部分:背景设置显示的需求颜色部分;

显示部分颜色设置

两种显示:

默认的黑色(UIStatusBarStyleDefault)
白色(UIStatusBarStyleLightContent)

  • 第一种方法:

      // info.plist添加字段 :Status bar style 
      // Transparent black style (alpha of 0.5)&Opaque black style:白色
      // Gray style (default):黑色
    
      // 同时添加View controller-based status bar appearance 设置为NO;
      // 设置后全局生效
    
  • 第二种方法:

      // 重写UIViewController的preferredStatusBarStyle方法
      - (UIStatusBarStyle)preferredStatusBarStyle {
      	//黑色:UIStatusBarStyleDefault //白色:UIStatusBarStyleLightContent
      	// 当前控制器生效
      	return UIStatusBarStyleDefault;
      }
      
      /// 返回是否Hidden
      - (BOOL)prefersStatusBarHidden {
      	//返回YES隐藏,NO显示
      	return NO;
      }
      
      //更新statusBarStyle  在同一界面需要改变状态栏颜色 需调用从方法,调用此方法后,系统会通知当前控制器调用preferredStatusBarStyle方法.一次我们可以来改变状态栏颜色
      - (void)setNeedsStatusBarAppearanceUpdate;
    
      // 如果此控制器被放在了UINavigationController中,重写UIViewController这些方法将不再会调用.我们可以定义UINavigationController的子类,重写childViewControllerForStatusBarStyle方法,UIViewController中重写的方法会生效.
      -(nullable UIViewController *)childViewControllerForStatusBarStyle {
      	//返回栈顶控制器 默认返回为nil
      	return self.topViewController;
      }
    
  • 第三种方法 UIApplication

      // 第二种方法是在View controller-based status bar appearance 为YES时生效.系统默认为YES.
      // 此方法需要设置View controller-based status bar appearance 为NO:
      [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
      // 并且此方法设置全局生效.iOS9以后全部都废除了,不推荐使用.
    

背景部分颜色设置(默认导航控制器存在)

  • 1 使用navigationBar的setBarTintColor接口,用此接口可改变statusBar的背景色.但是,一旦你设置了navigationBar的- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics接口,那么上面的setBarTintColor接口就不能改变statusBar的背景色,statusBar的背景色就会变成纯黑色。
  • 2 通过设置一层View覆盖在状态栏上,显示颜色.
    UIView *statusView = [[UIView alloc]initWithFrame:CGRectMake(0, -20, [UIScreen mainScreen].bounds.size.width, 20)];
    statusView.backgroundColor = [UIColor blackColor];
    [self.navigationController.navigationBar addSubview:statusView];

你可能感兴趣的:(iOS开发)