我有NavigationController来处理我的应用程序的导航。 根据我的设计,第一个视图应该没有可见的NavigationBar。之后的所有其他人都会。
在这个FirstView中,到目前为止,我正在使用它来隐藏ViewDidLoad中的NavBar:
self.navigationController?.isNavigationBarHidden = true
从这个FirstView我可以访问其他视图。在这些其他视图中,我使用以下方式显示NavBar:
self.navigationController?.isNavigationBarHidden = false
我的问题是:
我该如何预防?
谢谢!
答案 0 :(得分:7)
将该代码移至viewWillAppear()
而不是viewDidLoad()
。
viewDidLoad()
仅在每个实例化视图控制器中调用一次,而每当视图控制器即将在屏幕上显示时,都会调用viewWillAppear()
。
您可以阅读有关视图控制器生命周期here的更多信息。
答案 1 :(得分:3)
在 FirstViewController 的 viewWillAppear 方法中编写以下代码。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated);
self.navigationController?.isNavigationBarHidden = true
}
并在 SecondViewController 的 viewWillAppear 方法中编写以下代码
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated);
self.navigationController?.isNavigationBarHidden = false
}
请勿在 FirstViewController 中的 viewWillAppear 和 viewWillDisappear 中隐藏和显示导航栏。
答案 2 :(得分:1)
您可以使用此功能隐藏带有炫酷动画的NavigationBar:
func setupAnimationForNavigationBar(caseOfFunction: Bool) {
if caseOfFunction == true {
UIView.animate(withDuration: 0.5) {
self.navigationController?.navigationBar.transform = CGAffineTransform(translationX: 0, y: -200)
}
} else {
UIView.animate(withDuration: 0.5, animations: {
self.navigationController?.navigationBar.transform = CGAffineTransform.identity
})
}
}
如果你想隐藏NavigationBar,那么设置它" True"如果您想再次调用NavigationBar,请将其设置为" False"