iOS 状态栏颜色

项目中使用

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];

会报警告
'setStatusBarStyle:' is deprecated: first deprecated in iOS 9.0 - Use -[UIViewController preferredStatusBarStyle]
解决办法:
消除这个警告需要使用preferredStatusBarStyle这个API,
在项目中的info.plist文件里添加View controller-based status bar appearance,并修改成YES


WeChat144aeb38f19be4bb8afcbfb089c30d89.png

定义一个UIStatusBarStyle变量

@property (nonatomic, assign) UIStatusBarStyle myStatusBarStyle;

设置状态栏默认显示为黑色

- (void)viewDidLoad {
    [super viewDidLoad];
    //默认状态栏为黑色
    self.myStatusBarStyle = UIStatusBarStyleDefault;
}

自定义某个控制器中的颜色

重写这个,返回你想要的状态
- (UIStatusBarStyle)preferredStatusBarStyle {
    NSLog(@"改变状态栏颜色");
    return self.myStatusBarStyle;
}

更新状态

///监听scrollView的滚动事件
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    if (scrollView == self.myTableView) {
        CGFloat offsetY = scrollView.contentOffset.y;
        if (offsetY > 0) {
            //[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
            self.myStatusBarStyle = UIStatusBarStyleDefault;
            [self setNeedsStatusBarAppearanceUpdate];
        } else {
            //[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
            self.myStatusBarStyle = UIStatusBarStyleLightContent;
            [self setNeedsStatusBarAppearanceUpdate];
        }
    }
}

这样就可以修改状态栏的颜色

当视图控制器的状态栏属性的返回值发生变化时,会被调用。如果在一个block块中调用它,那么更改将与block块的其余部分一起被动画化。
- (void)setNeedsStatusBarAppearanceUpdate

如果想在启动的时候就隐藏状态栏
在Info.plist中增加一个配置即可:Status bar is initially hidden 为YES
这里的YES表示在app初始化(启动)的时候就隐藏状态栏。
当然,在启动图显示完毕后状态栏还是隐藏的。如果想重新显示状态栏,补上下面代码即可:
[UIApplication sharedApplication].statusBarHidden = NO;

你可能感兴趣的:(iOS 状态栏颜色)