iOS中statusBar样式设置问题

需求:

整体Style 为lightContent样式,这些页面通常是navigationcontroller的子控制器,通常使用push方式;个别页面为default样式,这些页面使用present或push方法弹出。

App页面中的StatusBarStyle整体一个样式,个别页面一个样式时,实现方式有两种:

方法一

  1. plist中设置Status bar stylelightContent,设置View controller-based status bar appearanceYES

  2. 扩展或在自定义navigationBarController中实现两个方法如下:

    1
    2
    3
    4
    5
    6
    7
    override open var childForStatusBarHidden: UIViewController? {
    return self.topViewController
    }

    override open var childForStatusBarStyle: UIViewController? {
    return self.topViewController
    }
  3. 在基类BaseViewController(所有controller都继承的父Controller类)中实现:

    1
    2
    3
    override var preferredStatusBarStyle: UIStatusBarStyle{
    return .lightContent
    }
  4. 在个别需要default样式的页面中实现:

    1
    2
    3
    override var preferredStatusBarStyle: UIStatusBarStyle{
    return .default
    }

    方法二

(因为UIApplication.shared.statusBarStyle方法在iOS9后废弃(仍然可用),所以不推荐了)

  1. plist设置Status bar stylelightContent,设置View controller-based status bar appearanceNO
  2. 设置UIApplication.shared.statusBarStyle = .lightContent
  3. 在基类BaseViewController中viewWillAppear里设置UIApplication.shared.statusBarStyle = .lightContent
  4. 在特殊样式的controller的viewWillAppear里设置UIApplication.shared.statusBarStyle = .default(如果BaseViewController里没有设置,就在特殊样式的controller的viewWillDisappear中还原设置)