状态栏分为两个部分:
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];