我有一个具有以下结构的应用程序:
override func viewDidLoad() {
super.viewDidLoad()
// Get notified when app is resumed.
NotificationCenter.default.addObserver(self, selector: #selector(applicationDidBecomeActive), name: NSNotification.Name.UIApplicationDidBecomeActive, object: nil)
// Hide main navigation controller's top bar.
navigationController?.setNavigationBarHidden(true, animated: true)
}
override func viewWillDisappear(_ animated: Bool) {
// Show main navigation controller's top bar when leaving split view.
self.navigationController?.setNavigationBarHidden(false, animated: true)
super.viewWillDisappear(animated)
}
func applicationDidBecomeActive() {
// Hide main navigation controller's top bar after returning to app.
navigationController?.navigationBar.isHidden = true
}
只要我不离开应用程序,这种方法效果很好。 如果应用程序在显示嵌入视图时被解除,则会发生以下情况:嵌入式导航栏仍然可见,但当我返回主视图时,其导航栏已消失。
在主场景中取消隐藏它的其他尝试不会将其恢复。 如何显示导航栏?
在旁注中,如果您想查看更详细的设置,请在previous question中进行说明。
更新 这很奇怪。我发现了三种隐藏导航栏的方法,在大多数情况下它们似乎都可以完成这项任务:
navigationController?.isNavigationBarHidden = true
navigationController?.setNavigationBarHidden(true, animated: false)
navigationController?.navigationBar.isHidden = true
最后一个是我用来确保应用程序恢复后隐藏栏的内容(请参阅上面的applicationDidBecomeActive()
)。用其他两个选项替换它可以消除这个问题。它与嵌入式导航控制器无关。
我不敢发布这个作为答案,因为我无法解释它。如果有人能够接受答案,我会很高兴。
答案 0 :(得分:0)
问题似乎是所有三种提到的方式都能够从视图中隐藏导航栏,但第三种选择是设置与其他两种不同的属性。
因此,使用navigationController?.navigationBar.isHidden = true
隐藏条形图然后尝试用self.navigationController?.setNavigationBarHidden(false, animated: true)
取消隐藏它不起作用。无论哪种方式都能解决问题。