iOS状态栏操作小结

找遍了网上一些设置状态栏的方法,没有比较全面的,所以自己总结了一个
设置样式和设置隐藏的方法基本一致,自行类比

##iOS6及之前版本
Info.plist表单中设置 View controller-based status bar appearance字段为 NO(禁用系统自带的状态栏)
在代码中通过- (void)setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated进行控制
这种方法对状态栏的修改是全局的,对所有视图控制器都会生效


##iOS7及之后版本

  1. iOS6的方法被不被苹果推荐使用,会报警告
  2. 在你需要隐藏状态栏的视图控制器类中添加这个方法
    - (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函数