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

Hide Navigation Bar in Specific View - Swift 3

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

在这个 FirstView 中,我目前使用它来隐藏 ViewDidLoad 内的 NavBar:

self.navigationController?.isNavigationBarHidden = true

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

self.navigationController?.isNavigationBarHidden = false

我的问题是:

我该如何预防?

谢谢!

将该代码移至 viewWillAppear() 而不是 viewDidLoad()

viewDidLoad() 每个实例化的视图控制器只调用一次,而 viewWillAppear() 会在视图控制器即将显示在屏幕上时调用。

您可以阅读有关视图控制器生命周期的更多信息here

在您的 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[=25= 中隐藏和显示导航栏].

您可以使用此功能隐藏带有炫酷动画的 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"