iOS上状态栏 就是指的最上面的20像素高的部分状态栏分前后两部分,要分清这两个概念,后面会用到:
前景部分:就是指的显示电池、时间等部分;背景部分:就是显示黑色或者图片的背景部分;
如下图:前景部分为白色,背景部分为黑色
注意:官方文档里面讲的很清楚,iOS7以后才有状态栏的自定义设置,所以该文章对iOS7之前可能无效!2.设置状态栏前景和背景这里必须注意:设置状态栏的时候,首先分为两种情况,其一:在plist里面设置了View controller-based status bar appearance为NO,这个属性的意义就是不让控制器基于status bar appearance的设置,也就是自己可以在每一个控制器里面自己进行设置。这个时候就不能再用- (UIStatusBarStyle)PReferredStatusBarStyle这个方法来设置,是没有效果的,而必须要用[[UIapplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]来设置,其二,当plist里面设置了View controller-based status bar appearance为YES,或者没有设置的时候(默认为YES),这个时候可以根据(UIStatusBarStyle)preferredStatusBarStyle这个方法来设置,用这个方法的时候也分为两种情况,一种情况是当前要设置的ViewController嵌入在一个NavigationController里面的时候,
系统默认的将指定状态栏的权利交给了导航控制器,要是想让导航控制器的childViewController来设置状态栏的颜色,就要自定义导航控制器来指定! 自定义导航控制器后,要是想指定状态栏由谁来设置,就需要说明清楚权利交给谁,下面两个方法都可以来指定,通过方法名也可以很清楚的理解,preferredStatusBarStyle这个方法重写,来返回想要指定的控制器的这个方法的返回结果,childViewControllerForStatusBarStyle这个方法则是用来说明让谁来拥有这个权利,两个方法都可以做的,自己选择即可,个人觉得第一个比较好,指定清楚之后,直接调这个控制器的这个方法返回值即可[objc] view plain copy- (UIStatusBarStyle)preferredStatusBarStyle { ViewController *vc = self.topViewController; return [vc preferredStatusBarStyle]; } - (UIViewController *)childViewControllerForStatusBarStyle { return self.topViewController; }完成上面的自定义后,只要在当前的Viewcontroller里面实现
preferredStatusBarStyle方法,设置好想要的状态栏颜色,然后在需要变更的地方调用[selfsetNeedsStatusBarAppearanceUpdate];
(这个方法会通知系统去调用当前UIViewController的preferredStatusBarStyle方法),这个和UIView的setNeedsDisplay原理差不多(调用UIView对象的setNeedsDisplay方法后,系统会在下次页面刷新时,调用重绘该view,系统最快能1秒刷新60次页面,具体要看程序设置),
下面在进行分情况的讨论
设置statusBar的【前景部分】简单来说,就是设置显示电池电量、时间、网络部分标示的颜色, 这里只能设置两种颜色:默认的黑色(UIStatusBarStyleDefault)白色(UIStatusBarStyleLightContent)可以设置的地方有两个:plist设置里面 和 程序代码里背景部分,简单来说,就是背景色;改变方法有两种:
navigationBar的setBarTintColor接口,用此接口可改变statusBar的背景色
注意:一旦你设置了navigationBar的- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics接口,那么上面的setBarTintColor接口就不能改变statusBar的背景色,statusBar的背景色就会变成纯黑色。
创建一个UIView,设置该UIView的frame.size 和statusBar大小一样,设置该UIView的frame.origin 为{0,-20},设置该UIView的背景色为你希望的statusBar的颜色,在navigationBar上addSubView该UIView即可。
新闻热点
疑难解答