在使用UINavigationController的时候,我们有时候需要使用setNavigationBarHidden隐藏NavigationBar,当参数animated为false时,从有NavigationBar的界面滑动到没有NavigationBar的界面途中取消滑动时会出现NavigationBar消失并且无法返回的BUG,将animated实参设置为animated可解决该问题。
下面的BaseNavigationController可以隐藏首次出现的ViewController和指定ViewController的NavigationBar。
class BaseNavigationController:UINavigationController,UINavigationControllerDelegate{
private static let noNavigationBarViewController:Set=["TestViewController"]
private var firstViewController: UIViewController?
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(rootViewController: UIViewController) {
super.init(rootViewController: rootViewController)
}
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
if firstViewController == nil {
firstViewController=viewController
}
let hideNavigationBar=(viewController==firstViewController!) || BaseNavigationController.noNavigationBarViewController.contains(viewController.ClassName)
navigationController.setNavigationBarHidden(hideNavigationBar, animated: animated)
}
override func viewDidLoad() {
super.viewDidLoad()
delegate=self
}
}