在特定视图中隐藏导航栏 - Swift 3

时间:2017-05-02 09:52:00

标签: ios swift3 uinavigationcontroller uinavigationbar xcode8.2

我有NavigationController来处理我的应用程序的导航。 根据我的设计,第一个视图应该没有可见的NavigationBar。之后的所有其他人都会。

在这个FirstView中,到目前为止,我正在使用它来隐藏ViewDidLoad中的NavBar:

self.navigationController?.isNavigationBarHidden = true

从这个FirstView我可以访问其他视图。在这些其他视图中,我使用以下方式显示NavBar:

self.navigationController?.isNavigationBarHidden = false

我的问题是:

  • 当我从具有Visible NavBar的View导航回到带有Hidden NavBar的FirstView时,NavBar现在可见。 基本上,如果我使用后退按钮,NavBar只会隐藏第一次显示。

我该如何预防?

谢谢!

3 个答案:

答案 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"