iOS 状态蓝颜色设置和隐藏
2015-10-22 10:35
423 查看
iOS9之前,状态栏颜色设置方法:
一、在 info.plist 中,将 View controller-based status bar appearance 设为 NO
在app delegate中:
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
3、在个别状态栏字体颜色不一样的vc中
-(void)viewWillAppear:(BOOL)animated{
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
}
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}
iOS9 开始,就不能这样设置了. iOS9设置方法如下:
二、在 info.plist 中,将 View controller-based status bar appearance 设为 YES ,或者没有设置。
View controller-based status bar appearance的默认值就是YES。
如果View controller-based status bar appearance为YES。
则[UIApplication sharedApplication].statusBarStyle 无效。
用下面的方法:
1、在vc中重写vc的preferredStatusBarStyle方法。
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleDefault;
}
2、在viewDidload中调用:[self setNeedsStatusBarAppearanceUpdate];
但是,当vc在nav中时,上面方法没用 ,vc中的preferredStatusBarStyle方法根本不用被调用。
原因是,[self setNeedsStatusBarAppearanceUpdate]发出后,
只会调用navigation controller中的preferredStatusBarStyle方法,
vc中的preferredStatusBarStyley方法跟本不会被调用。
解决办法有两个:
方法一:
设置navbar的barStyle 属性会影响status bar 的字体和背景色。如下。
//status bar的字体为白色
//导航栏的背景色是黑色。
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
//status bar的字体为黑色
//导航栏的背景色是白色,状态栏的背景色也是白色。
//self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
方法二:
自定义一个nav bar的子类,在这个子类中重写preferredStatusBarStyle方法:
MyNav* nav = [[MyNav alloc] initWithRootViewController:vc];
self.window.rootViewController = nav;
@implementation MyNav
- (UIStatusBarStyle)preferredStatusBarStyle
{
UIViewController* topVC = self.topViewController;
return [topVC preferredStatusBarStyle];
}
这样问题就解决了.
-----------------------------------我是一条分割线---------------------------------------------------
-----------------------------------终极解决方案------------------------------------------------------
然而我们有若干个页面,都需要重新写这些方法,很是麻烦,我们可以使用下面取巧的方法来一次性的解决这个难题.
具体解决方法如下:
1. 给UIViewController写分类,实现如下方法:
- (UIStatusBarStyle)preferredStatusBarStyle
{
returnUIStatusBarStyleLightContent;
}
2. 给UINavigationController写分类,实现如下方法:
- (UIViewController *)childViewControllerForStatusBarStyle
{
returnself.topViewController;
}
前面部分是抄袭http://blog.csdn.net/gaoyp/article/details/38441723作者的. 后面是我自己结合公司项目的扩充.
状态栏隐藏:
ios8之前,使用[[UIApplicationsharedApplication]
setStatusBarHidden:YES];[b]进行隐藏[/b]
[b]之后需要修改plist文件.[/b]
增加 View controller-based status bar appearance 一行,选择为 NO。就可以了
一、在 info.plist 中,将 View controller-based status bar appearance 设为 NO
在app delegate中:
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
3、在个别状态栏字体颜色不一样的vc中
-(void)viewWillAppear:(BOOL)animated{
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
}
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}
iOS9 开始,就不能这样设置了. iOS9设置方法如下:
二、在 info.plist 中,将 View controller-based status bar appearance 设为 YES ,或者没有设置。
View controller-based status bar appearance的默认值就是YES。
如果View controller-based status bar appearance为YES。
则[UIApplication sharedApplication].statusBarStyle 无效。
用下面的方法:
1、在vc中重写vc的preferredStatusBarStyle方法。
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleDefault;
}
2、在viewDidload中调用:[self setNeedsStatusBarAppearanceUpdate];
但是,当vc在nav中时,上面方法没用 ,vc中的preferredStatusBarStyle方法根本不用被调用。
原因是,[self setNeedsStatusBarAppearanceUpdate]发出后,
只会调用navigation controller中的preferredStatusBarStyle方法,
vc中的preferredStatusBarStyley方法跟本不会被调用。
解决办法有两个:
方法一:
设置navbar的barStyle 属性会影响status bar 的字体和背景色。如下。
//status bar的字体为白色
//导航栏的背景色是黑色。
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
//status bar的字体为黑色
//导航栏的背景色是白色,状态栏的背景色也是白色。
//self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
方法二:
自定义一个nav bar的子类,在这个子类中重写preferredStatusBarStyle方法:
MyNav* nav = [[MyNav alloc] initWithRootViewController:vc];
self.window.rootViewController = nav;
@implementation MyNav
- (UIStatusBarStyle)preferredStatusBarStyle
{
UIViewController* topVC = self.topViewController;
return [topVC preferredStatusBarStyle];
}
这样问题就解决了.
-----------------------------------我是一条分割线---------------------------------------------------
-----------------------------------终极解决方案------------------------------------------------------
然而我们有若干个页面,都需要重新写这些方法,很是麻烦,我们可以使用下面取巧的方法来一次性的解决这个难题.
具体解决方法如下:
1. 给UIViewController写分类,实现如下方法:
- (UIStatusBarStyle)preferredStatusBarStyle
{
returnUIStatusBarStyleLightContent;
}
2. 给UINavigationController写分类,实现如下方法:
- (UIViewController *)childViewControllerForStatusBarStyle
{
returnself.topViewController;
}
前面部分是抄袭http://blog.csdn.net/gaoyp/article/details/38441723作者的. 后面是我自己结合公司项目的扩充.
状态栏隐藏:
ios8之前,使用[[UIApplicationsharedApplication]
setStatusBarHidden:YES];[b]进行隐藏[/b]
[b]之后需要修改plist文件.[/b]
增加 View controller-based status bar appearance 一行,选择为 NO。就可以了
相关文章推荐
- 苹果公司正式发布iOS9 beta3
- 解决适配iOS9
- UM适配iOS9
- IOS 9 关于微信,QQ三方登陆的https适配结局方案,XCODE配置
- App Transport Security (ATS)
- AddressBookUI Framework in iOS9 beta4
- iOS---iOS9中获取通讯录的方法:Contacts. framework简单使用
- 整理iOS9适配中出现的坑(图文)
- 整理 iOS 9 适配中出现的坑(图文)
- iOS项目更新之升级Xcode7 & iOS9
- iOS 适配系列教程
- iOS9 webView打不开了
- iOS 9部分问题
- Xcode 7 和iOS9网络访问失败的问题
- iOS 9适配技巧(ios自学笔记)
- UIPickView 的高度 iOS9 Xcode7
- AFNetWorking 在 IOS9 请求数据失败解决方案
- iOS9变化笔记
- Xcode模拟器不能选择 强制打开提示iOS Simulator 意外退出
- error itms-90535,error itms-90163