繁体   English   中英

设置NavigationBar仅用于目的地ViewController

[英]Set NavigationBar for Destination ViewController Only

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

选择UITableViewCell SourceViewController选择到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点击“返回”以返回到SourceViewController ,导航SourceViewController将重新出现在SourceViewController

下一个“显而易见的”步骤是在SourceViewController viewDidAppear中设置navigationBar.hidden = false ,但这有很多原因:主要是DRYness,而且在返回SourceViewController ,隐藏navigationBar有所延迟,并且对于一瞬间。

我该如何解决这个问题?

检查ViewController生命周期希望了解iOS UIViewController生命周期 当您启动程序时,将调用viewDidLoad并一切正常,但是从detailController返回时,未调用viewDidLoad,只需在viewWillApear中更改此行(self.navigationController?.navigationBar.hidden = true),一切都必须正常。

我认为这会起作用,隐藏导航栏。 在显示/消失视图之前。

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM