基本的にはViewControllerのprefersStatusBarHidden
がtrueになっていれば良いのだけどUINavigationControllerの場合は上手く行かない場合がある。(恐らく一番上にあるUIViewControllerのステータスバー設定が反映させるために、UINavigationControllerの子ViewControllerは設定が上手く通らないのだと思う)
NavigationController.swift
class NavigationController: UINavigationController {
private var statusBarStyle = UIStatusBarStyle.Default
private var statusBarHidden = true
override func viewDidLoad() {
super.viewDidLoad()
delegate = self
}
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return statusBarStyle
}
override func prefersStatusBarHidden() -> Bool {
return statusBarHidden
}
}
extension NavigationController: UINavigationControllerDelegate {
func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
statusBarStyle = viewController.preferredStatusBarStyle()
statusBarHidden = viewController.prefersStatusBarHidden()
setNeedsStatusBarAppearanceUpdate()
}
func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
statusBarStyle = viewController.preferredStatusBarStyle()
statusBarHidden = viewController.prefersStatusBarHidden()
setNeedsStatusBarAppearanceUpdate()
}
}
このようにしてpop/pushの際にそのViewControllerの設定を取得して反映させればおk