找遍了网上一些设置状态栏的方法,没有比较全面的,所以自己总结了一个
设置样式和设置隐藏的方法基本一致,自行类比
iOS6及之前版本
在Info.plist
表单中设置 View controller-based status bar appearance
字段为 NO(禁用系统自带的状态栏)
在代码中通过- (void)setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated
进行控制
这种方法对状态栏的修改是全局的,对所有视图控制器都会生效
iOS7及之后版本
- iOS6的方法被不被苹果推荐使用,会报警告
- 在你需要隐藏状态栏的视图控制器类中添加这个方法
- (BOOL)prefersStatusBarHidden{ return YES; }
设置YES就隐藏状态栏,设置NO显示状态栏
系统会自动调用这个函数
如果需要更改StatusBar的状态的话,可以使用在类中添加一个属性isStatusBarHidden
,在init中初始化为你想要的值,添加这个方法
- (BOOL)prefersStatusBarHidden{ return self.isStatusBarHidden; }
在需要显示状态栏的时候调用
self.isStatusBarHidden = NO; [self setNeedsStatusBarAppearanceUpdate];
在需要隐藏状态栏的时候调用
self.isStatusBarHidden = YES; [self setNeedsStatusBarAppearanceUpdate];
setNeedsStatusBarAppearanceUpdate这个方法的作用是更新状态栏,在每次修改状态栏设置或者样式之后调用
注意:此方法对NavigationController无效,要使其生效可创建一个NavigationController的类别,增加这个方法
- (UIStatusBarStyle)preferredStatusBarStyle { return [[self topViewController] preferredStatusBarStyle]; }
这个函数的返回值默认返回nil,此时系统就会调用当前viewControllerA的preferredStatusBarStyle函数;如果返回值是另一个viewControllerB那么系统就会调用viewControllerB的preferredStatusBarStyle函数