iOS7之后 改变状态栏颜色方法

本文旨在针对ViewController单个设定状态栏的颜色,全程可以自定义设置。

  • 默认的黑色 UIStatusBarStyleDefault
  • 白色 UIStatusBarStyleLightContent

iOS7之后修改状态可以通过两种方式:

1.

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]

2.

- (UIStatusBarStyle)preferredStatusBarStyle{
    return UIStatusBarStyleLightContent;
}

下面我介绍两种方式具体的使用方法

  • 第一种方法,通过 [UIApplication sharedApplication] 设置

在iOS7之后,系统将状态栏交给Controller管理,如果要使用这种方法,需要配置.plist文件,添加一个key

View controller-based status bar appearance

控制器的状态栏  由控制器管理

并且设置对应的Value为 NO

代表的意思就是 状态栏不是由控制器来管理,而是由 UIApplication 来管理。

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]

这样你在代码中使用这个方法就会起到作用了。

当然了这个key默认为YES,也就是说默认是控制器来管理的

这里着重介绍的第二种方法:

  • 全局全程自定义设置当前控制器ViewController的状态栏颜色

一般来说iOS普遍的结构是使用 UINavigationController 来搭建整体的框架结构,这样的话,在某个单独的UIViewController 重写

- (UIStatusBarStyle)preferredStatusBarStyle;

当前控制器的这个方法,并不会执行。

执行的实际上还是当前控制器对应的UINavigationController的状态栏的颜色。

解决方案就是,在UIViewController对应的UINavigationController重写

- (UIStatusBarStyle)preferredStatusBarStyle;

也就是说在自定义的UINavigationController的子类,在子类中重写这个方法:

- (UIStatusBarStyle)preferredStatusBarStyle{
 //获取当前UINavigationController最上面的UIViewController,也就是说获取最当前的控制器
    UIViewController *topVC = self.topViewController;

/*返回的是当前控制器UIViewController对应的- (UIStatusBarStyle)preferredStatusBarStyle;
*/
    return [topVC preferredStatusBarStyle];
}

这样,通过这个方法,在显示状态栏的时候,就会显示所有控制器对应 - (UIStatusBarStyle)preferredStatusBarStyle; 这个方法返回的状态栏的类型了。

这时候,我们只需要在需要改变状态栏颜色的控制器,重写这个方法,就会调对应的状态栏颜色了

- (UIStatusBarStyle)preferredStatusBarStyle{
    return  UIStatusBarStyleLightContent;
}

OK,至此为止,你就可以任性的自定义自己所有控制器,对应的状态栏颜色了。

当然,为了更好的去管理所有的控制器,写一个UIViewController的子类,然后你所有的控制器 继承自这个子类,在这个子类里重写

- (UIStatusBarStyle)preferredStatusBarStyle{
    return  UIStatusBarStyleLightContent;
}

实现想怎么改,就怎么改。

这么好的文章,一定要 顶!顶!顶!顶!