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

7

我是一名有用的助手,可以为您翻译文本。

我有一个NavigationController,用于处理我的应用程序中的导航。

根据我的设计,第一个视图不应该有可见的NavigationBar。之后的所有其他视图都会有。

在这个FirstView中,我目前使用以下方法来隐藏NavBar,在ViewDidLoad中:

self.navigationController?.isNavigationBarHidden = true

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

self.navigationController?.isNavigationBarHidden = false

我的问题是:
  • 当我从一个显示NavBar的视图导航回到隐藏NavBar的FirstView时,NavBar现在是可见的。 基本上,NavBar只有在第一次隐藏时才会隐藏,如果使用后退按钮,则会显示。

我该如何防止这种情况发生?

谢谢!

3个回答

7
将代码移到viewWillAppear()而不是viewDidLoad()viewDidLoad()每个实例化的视图控制器只会调用一次,而viewWillAppear()在视图控制器即将呈现在屏幕上时被调用。
您可以在此处了解有关视图控制器生命周期的更多信息。

我现在明白了我的错误。 我把viewWillAppear放在了viewDidLoad里面... 感谢您的帮助! - Quentin Beau Kwint

4
在你的 FirstViewControllerviewWillAppear 方法中编写以下代码。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated);
self.navigationController?.isNavigationBarHidden = true
}

在你的SecondViewControllerviewWillAppear方法中写下面的代码

 override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated);
self.navigationController?.isNavigationBarHidden = false
}

不要在 viewWillAppearviewWillDisappear 中尝试隐藏和显示导航栏,这是因为这两个方法会在 FirstViewController 中连续调用。


3
您可以使用此函数来带有酷炫动画隐藏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”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接