仅为目标 ViewController 设置 NavigationBar

Set NavigationBar for Destination ViewController Only

我有一个名为 SourceViewController 的 ViewController,它嵌入在 NavigationController 中。

SourceViewController 选择 UITableViewCell 后转至 DestinationViewController

我想在 SourceViewController 上隐藏导航栏,但在 DestinationViewController 上显示导航栏以显示后退按钮。

因此,在 SourceViewController 中:

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationController?.navigationBar.hidden = true
}

DestinationViewController 中: 重写 func viewDidLoad() { super.viewDidLoad()

    self.navigationController?.navigationBar.hidden = false
}

但是,当我在 DestinationViewController 到 return 到 SourceViewController 中点击 "Back" 时,导航栏会重新出现在 SourceViewController

下一步 'obvious' 将在 SourceViewController 中设置 viewDidAppear 中的 navigationBar.hidden = false,但是这闻起来有很多原因:主要是干燥,但也有 [=48] =]ing 到 SourceViewController,隐藏 navigationBar 有延迟,一瞬间可见。

如何解决这个问题?

检查 ViewController 生命周期 Looking to understand the iOS UIViewController lifecycle 。 当您启动程序时调用 viewDidLoad 并且一切正常,但是当您从 detailController 返回时,不会调用 viewDidLoad,只需更改 viewWillApear 中的这一行 (self.navigationController?.navigationBar.hidden = true) 和所有内容一定没问题。

我认为这会起作用,隐藏导航栏。在 appearing/disappearing 视图之前。

override func viewWillAppear(animated: Bool) {
    navigationController?.navigationBarHidden = true
    super.viewWillAppear(animated)
}


override func viewWillDisappear(animated: Bool) {
    navigationController?.navigationBarHidden = true
    super.viewWillDisappear(animated)
}