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

时间:2017-09-19 14:51:03

标签: ios swift uinavigationcontroller uinavigationbar uicontainerview

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

  1. 在我的应用程序的根目录是一个主要场景,其基本视图控制器由我的顶级导航控制器管理并显示导航栏。
  2. 我有第二个场景,容器视图占据整个屏幕。
  3. 在容器视图中嵌入了另一个导航控制器,其中包含其他视图控制器和自己的导航栏。
  4. 为了避免同时显示两个导航栏,我隐藏和取消隐藏容器视图控制器中的主导航栏,如下面的代码所示。
  5. 我从主场景导航到嵌入式场景并返回。
  6. 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())。用其他两个选项替换它可以消除这个问题。它与嵌入式导航控制器无关。

    我不敢发布这个作为答案,因为我无法解释它。如果有人能够接受答案,我会很高兴。

1 个答案:

答案 0 :(得分:0)

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

因此,使用navigationController?.navigationBar.isHidden = true隐藏条形图然后尝试用self.navigationController?.setNavigationBarHidden(false, animated: true)取消隐藏它不起作用。无论哪种方式都能解决问题。