ios7以后,状态栏的外观默认是依赖于控制器的,会随着控制器的不同设置而不同。iOS7之前,状态栏是全局性的。
一、针对某个控制器隐藏与样式更改
在控制器的
- (void)viewWillAppear:(BOOL)animated方法中添加如下代码:
if ([selfrespondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)])
{//ios7
[self setNeedsStatusBarAppearanceUpdate];
}
然后重写下面两个方法:
- (BOOL)prefersStatusBarHidden
{
returnYES;//隐藏为YES,显示为NO
}
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
//UIStatusBarStyleDefault = 0 黑色文字,浅色背景时使用
//UIStatusBarStyleLightContent = 1 白色文字,深色背景时使用
}
当prefersStatusBarHidden返回YES,当前控制器的状态栏被隐藏。当prefersStatusBarHidden返回NO,根据preferredStatusBarStyle的返回值显示状态栏的颜色。
其中,setNeedsStatusBarAppearanceUpdate会回调prefersStatusBarHidden和preferredStatusBarStyle方法。
二、全局隐藏与样式更改
1、隐藏
(1)在plist文件中,添加key:View controller-based status bar appearance 为NO;添加key:Status bar is initially hidden 为YES。
(2)在plist文件中,添加key:View controller-based status bar appearance 为NO,表示状态栏的外观不依赖于控制器,这样之后,添加:
[[UIApplication sharedApplication] setStatusBarHidden:YESwithAnimation:UIStatusBarAnimationSlide];也可以隐藏全局状态栏。
2、更改样式
在plist文件中,添加key:View controller-based status bar appearance 为NO,然后再控制器的视图加载阶段里添加如下代码:
[[UIApplicationsharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
将全局的状态栏的变为白色字,默认是黑色。
三、ios7之前隐藏与更改全局状态栏
[[UIApplicationsharedApplication]setStatusBarHidden:YESwithAnimation:UIStatusBarAnimationSlide];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];