繁体   English   中英

暂停应用程序后,主导航栏消失

[英]Main Navigation Bar Disappears When the App Is Suspended

我有一个具有以下结构的应用程序:

  1. 我的应用程序的根本是一个主场景,其中包含一个基本视图控制器,该控制器由我的顶级导航控制器管理并显示导航栏。
  2. 我有第二个场景,其中的容器视图占据了整个屏幕。
  3. 嵌入到容器视图中的是另一个导航控制器,该导航控制器具有其他视图控制器和自己的导航栏。
  4. 为了避免同时显示两个导航栏,我在容器视图控制器中隐藏和取消隐藏主导航栏,如下面的代码所示。
  5. 我从主场景导航到嵌入式场景,然后返回。
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
}

只要我不离开应用程序,此方法就可以很好地工作。 如果在显示嵌入式视图时关闭应用程序,则会发生以下情况:嵌入式导航栏仍然可见,但是当我返回主视图时,其导航栏消失了。

在主场景中取消隐藏它的其他尝试不会将其恢复。 如何显示导航栏?

另外,如果您想查看更详细的设置,请参见上一个问题


更新:这很奇怪。 我发现了三种隐藏导航栏的方法,它们似乎在大多数情况下都能完成工作:

navigationController?.isNavigationBarHidden = true navigationController?.setNavigationBarHidden(true, animated: false) navigationController?.navigationBar.isHidden = true

最后一个是我用来确保应用程序恢复后该栏保持隐藏的功能(请参阅上面的applicationDidBecomeActive() )。 用其他两个选项之一替换它可以消除此问题。 它与嵌入式导航控制器无关。

我不敢将其发布为答案,因为我无法真正解释它。 如果有人可以,我将很乐意接受答案。

问题似乎在于,上述所有三种方式都能够从视图中隐藏导航栏,但是第三个选项设置的属性不同于其他两种。

因此,使用navigationController?.navigationBar.isHidden = true隐藏该栏,然后尝试使用self.navigationController?.setNavigationBarHidden(false, animated: true)取消隐藏。 任一种方式都可以解决问题。

暂无
暂无

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

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