iOS开发之修改状态栏背景色的三种方法(statusBar)

我们在iOS开发的时候,经常会遇到需要修改状态栏的情况。一般来说,如果我们使用了NavigationController,直接设置导航栏的barTintColor是可以连带将statusBar的背景色也调整成和NavigationBar一样的颜色。但是如果我们想要单独管控statusBar的颜色呢?下面我们来介绍一些修改statusBar的一些方法。
1、和状态栏连带调整。
这就是我上面说到的,在有导航栏,并且你希望你的导航栏和状态栏颜色一致的情况下使用,简单方便。代码如下:

self.navigationController.navigationBar.barTintColor = [UIColor greenColor];

2、在NavigationBar上面添加View遮罩层来控制statusBar的背景色。
这种方式看起来不太科学,但是用起来却十分好用,如果你希望你的状态了和导航栏的颜色可以分开控制,这种方式是值得一用的。
代码如下:

UIView *stateView = [[UIView alloc] initWithFrame:CGRectMake(0, -20, SCREEN_WIDTH, 20)];
    [self.navigationController.navigationBar addSubview:stateView];
    stateView.backgroundColor = [UIColor blackColor];

这里其实是把用于遮罩的View添加到了NavigationBar上面,所以当导航栏隐藏的时候,会感觉状态栏也一起被隐藏了。其实我们并没有真正改变statusBar的背景色,只是一个遮罩层罢了。但是这也能满足大部分的需求了。
3、通过KVC取出statusBar再调整其背景色。
这种方法看起来是最符合OC的规范的,使用到了KVC,是直接将系统的statusBar属性进行修改,所以就算没有导航栏,也是可以修改的。代码如下:

UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
        statusBar.backgroundColor = color;
    }

当然这也有一些弊端,如果我们在代码中进行了这种修改,那么整个APP的状态栏都会改变成我们设置的颜色,所以如果在某个页面需要不同的状态了颜色,我们还需要再设置一下。

以上是修改状态栏目的三种方法。如有不正确的地方,请指正。谢谢。

你可能感兴趣的:(iOS开发之修改状态栏背景色的三种方法(statusBar))