iOS statusBar

隐藏/显示statusBar(iOS 7.0+)

  • 全局隐藏/显示状态栏

    1. 在info.plist中添加View controller-based status bar appearance,并将value设为NO,状态栏的隐藏/显示受到全局控制。
    2. General-Deployment Info 中勾选或取消勾选Hide stauts bar选项,即可隐藏或显示状态栏,此时无法通过代码中控制状态栏
  • 通过代码动态地隐藏/显示状态栏

    1. 在info.plist中添加View controller-based status bar appearance,并将value设为YES,或删除View controller-based status bar appearance字段,系统默认为可通过代码动态地隐藏/显示状态栏。

    2. 在需要更改status bar隐藏状态的页面重载- (BOOL)prefersStatusBarHidden方法即可

       - (BOOL)prefersStatusBarHidden {
          return YES;
      }
      
    3. 如果在当前页面动态的更改状态栏隐藏/显示状态,需要[self setNeedsStatusBarAppearanceUpdate];来通知系统状态栏要改变。

调节statusBar style

  • 全局设置statusBar style
    在info.plist中添加Status bar style,将value设为UIStatusBarStyleLightContent或者UIStatusBarStyleDefault即可。
  • 动态调节statusBar style
    1. 在info.plist中添加View controller-based status bar appearance,并将value设为YES
    2. 在需要更改status bar隐藏状态的页面重载- (UIStatusBarStyle)preferredStatusBarStyle方法即可
      - (UIStatusBarStyle)preferredStatusBarStyle {
          return UIStatusBarStyleDefault;//黑色字体
          //return UIStatusBarStyleLightContent;//亮色字体
      }
      
    3. 如果在当前页面动态的更改状态栏样式,需要[self setNeedsStatusBarAppearanceUpdate];来通知系统状态栏要改变。
    4. 如果当前的页面在UINavigationController中,还需要新建一个子类,继承UINavigationController,在子类中重载- (UIViewController *)childViewControllerForStatusBarStyle方法即可。
      - (UIViewController *)childViewControllerForStatusBarStyle {
          return self.topViewController;
      }
      
      原因:当需要更改status bar syle时,系统会首先调用application.window.rootViewController- (UIStatusBarStyle)preferredStatusBarStyle方法,如果此时的rootViewControllerUINavigationController,那么当前的viewController根本未被调用,因此通过- (UIViewController *)childViewControllerForStatusBarStyle通知系统去调用rootViewController.topViewController中的preferredStatusBarStyle方法。

参考

  1. iOS StatusBar 的坑应该都在这儿了
  2. iOS管理StatusBar

你可能感兴趣的:(iOS statusBar)