[已解决] 隐藏导航栏+改变状态栏样式时出现导航栏莫名其妙没了
当ViewController.swift
实现
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
时,两个ViewController
对应的UIStatusBarStyle
不同,则会出现如上图。UIStatusBarStyle
一致则正常。
class NavigationController: UINavigationController {
override var childViewControllerForStatusBarStyle: UIViewController? {
return topViewController
}
}
只需要将childViewControllerForStatusBarStyle
设置为UINavigationController.topViewController
即可。
附上BViewController
中相关代码。在切换的两个UIViewController
的preferredStatusBarStyle
一样时,不需要设置UINavigationController.childViewControllerForStatusBarStyle
。
class BViewController: UIViewController {
var navigationBarHidden = false
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
guard let navigationController = navigationController else {
return
}
if navigationController.isNavigationBarHidden != navigationBarHidden {
navigationController.setNavigationBarHidden(navigationBarHidden, animated: animated)
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
guard let navigationController = navigationController else {
return
}
guard let last = navigationController.viewControllers.last as? BViewController else {
return
}
if last.navigationBarHidden != navigationBarHidden {
navigationController.setNavigationBarHidden(last.navigationBarHidden, animated: animated)
}
}
}
- @木头
viewWillAppear
更换为viewDidAppear
然后调试,在Demo中测试也可以曲线救国。 - @Harry 提供的终极大法~