您的位置:首页 > 移动开发 > IOS开发

iOS开发中修改状态栏颜色

2015-02-01 21:56 387 查看

</pre>iOS开发中修改状态栏颜色</h1><div><span style="font-size:14px; white-space:pre"></span><span style="font-family:SimHei; font-size:14px">在iOS开发过程中设置视图控制器(UIViewController)和 自定义导航栏(UINavigationBar)的背景颜色或图片时,可能由于背景颜色或者图片颜色与状态栏颜色相近,导致状态栏上的手机信号、时间、电池电量等的显示看不到。这时可以通过修改状态栏的颜色使状态栏突出显示。方法有以下两种:</span></div><div><span style="font-size:14px"></span></div><div><span style="font-size:14px"><span style="white-space:pre"></span>方法一:</span></div><div><span style="white-space:pre"><span style="font-size:14px"></span></span><div><span style="font-family:'Microsoft YaHei'; font-size:14px; white-space:pre"></span><span style="font-family:SimHei; font-size:14px">修改工程的info.plist文件,工程 ——> Supporting Files ——> info.plist. 将其中的 View controller-based status bar appearance 属性 为 NO,就可以通过下面的方法设置:</span></div><div><span style="font-family:SimHei; font-size:14px">在Appdelegate中,或者在任意一个视图控制器中添加如下代码:</span></div><div><pre name="code" class="objc" style="font-size: 14px;">[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

此种方法设置后所有界面的状态栏的颜色均为同一种样式。

可以设置如下四种样式,一般最常用的为前两种样式:
<span style="font-size: 14px;">UIStatusBarStyleDefault
UIStatusBarStyleLightContent
UIStatusBarStyleBlackTranslucent
UIStatusBarStyleBlackOpaque</span>


如果想在不同的控制器中显示不同的样式那么,在对应的控制器中覆写如下方法:
<span style="font-size:14px;">- (void)viewWillAppear:(BOOL)animated{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}</span>


<span style="font-size:14px;">- (void)viewWillDisappear:(BOOL)animated{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}</span>


这样就会在特定的控制器中设置想要的样式。

方法二:

此种方法(有局限性,在有导航控制器时,即将视图控制器添加到导航控制器后,此方法失效,此方法不调用)是在视图控制器中覆写

<span style="font-size:14px;"></span><pre name="code" class="objc"><pre name="code" class="objc">- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}




但是,当vc在nav中时,上面方法没用,vc中的preferredStatusBarStyle方法根本不用被调用。

原因是,[self setNeedsStatusBarAppearanceUpdate]发出后,

只会调用navigation controller中的preferredStatusBarStyle方法,

vc中的preferredStatusBarStyley方法跟本不会被调用。

在有导航控制器时:
子类化导航控制器,并在其中覆写preferredStatusBarStyle方法,代码如下:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}


这样设置导航所管理的所有视图控制器的状态拦的样式都一样。

如果想要实现在不同的视图控制器中状态栏显示不同的样式,在导航控制器中如下覆写preferredStatusBarStyle方法:
- (UIStatusBarStyle)preferredStatusBarStyle
{
UIStatusBarStyle style = [self.topViewController preferredStatusBarStyle];
return style;
}


然后在视图控制器中同样覆写此方法:
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent; //这里返回自己想要的样式
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: