【问题标题】:Main Navigation Bar Disappears When the App Is Suspended应用暂停时主导航栏消失
【发布时间】:2018-02-28 10:12:17
【问题描述】:

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

  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
}

只要我不离开应用程序,它就可以正常工作。 如果应用在显示嵌入视图时被关闭,会发生以下情况:嵌入的导航栏仍然可见,但当我返回主视图时,它的导航栏消失了。

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

附带说明,如果您想查看previous question 中描述的更详细设置。


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

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

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

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

【问题讨论】:

  • viewDidLoad 在视图加载并准备就绪时调用一次,但 viewWillDisappear 总是在视图消失时调用。尝试将代码从 viewDidLoad 移动到 VC 的 viewWillAppear 方法中 - 这可能会有所帮助:)
  • 感谢您的建议。我刚刚尝试过,不幸的是它没有帮助。这可能是隐藏酒吧的更好地方。但问题确实是在导航回主视图时再次出现。
  • 其他:你可以为这个通知添加Observer你的控制器:UIApplicationWillEnterForeground 并在与之相关的选择器中处理栏的显示/隐藏。
  • 实际上,我也在听那个隐藏栏的事件。没有它,主导航栏会在恢复时返回,我会得到双栏。但也许你是对的,这导致了问题。那么问题是:我应该如何隐藏它。我在问题中添加了这个细节。

标签: ios swift uinavigationcontroller uinavigationbar uicontainerview


【解决方案1】:

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

因此,使用navigationController?.navigationBar.isHidden = true 隐藏栏,然后尝试使用self.navigationController?.setNavigationBarHidden(false, animated: true) 取消隐藏它不起作用。无论哪种方式保持一致都可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多