主视图在拆分视图中的后退导航不适用于显示模式 "Auto" 或 "primaryHidden"

Master View's Back Navigation in Split View Not Working with Display Modes "Auto" or "primaryHidden"

对于我的应用程序,我创建了一个嵌入在容器视图中的拆分视图,即拆分视图不在应用程序的根目录中。

如图所示,我在主视图中添加了一个导航项,用作后退按钮并将整个拆分视图从主导航堆栈中弹出。

@IBAction func backButtonTapped(_ sender: UIBarButtonItem) {
    parent?.navigationController?.popViewController(animated: true)
}

当我将拆分视图的显示模式设置为 allVisible 时,这在所有设备上都运行良好。它适用于折叠视图(例如在 iPhone 纵向模式下)和展开的拆分视图。

问题: 当我使用其他显示模式如 AutoprimaryHidden 时,主视图中的导航按钮仍然显示但在横向(扩展)视图。按钮处理程序被调用,但上面的语句不会离开拆分视图。 parent 的导航控制器似乎无法通过这种方式访问​​ (= nil)。为什么该语句在某些显示模式下不起作用,我怎样才能让它起作用?

这感觉有点笨拙,但确实可以。更好的解决方案可能来自于理解为什么父级导航控制器在某些显示模式下可以访问但在其他模式下不能访问。

有效的是通过详细视图的导航控制器并将其从堆栈中移除。此处更改了显示模式,以防止出现一些丑陋的过渡效果。

@IBAction func backButtonTapped(_ sender: UIBarButtonItem) {

    if (splitViewController!.viewControllers.count > 1) {
        // master and detail visible in split view
        let detailViewController = splitViewController!.viewControllers[1]
        splitViewController!.preferredDisplayMode = .primaryHidden
        detailViewController.navigationController?.popViewController(animated: true)
    } else {
        // split view collapsed into single view mode (e.g. iPhone portrait)
        parent?.navigationController?.popViewController(animated: true)
    }
}