iOS 14 中的 UISplitViewController 在横向模式下按预期工作,但在纵向模式下不起作用

UISplitViewController in iOS 14 works as intended in landscape mode, but not in portrait

我试图在我的 iOS14 应用程序中保留 iOS13 和 UISplitViewController 的功能。在横向模式下一切都按预期工作(两个并排视图控制器),但是如果我以纵向启动应用程序(拆分视图控制器是初始视图控制器),当详细视图控制器中的变量为 nil 时我的条件逻辑显示主视图控制器无法正常工作并且导航栏(栏按钮项目,主视图控制器和详细视图控制器的大标题)不可见。

func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool  {
        
        if (secondaryViewController is UINavigationController) && (((secondaryViewController as? UINavigationController)?.topViewController) is DetailViewController) && (((secondaryViewController as? UINavigationController)?.topViewController as? DetailViewController)?.dict == nil) {

            return true

        } else {

            return false

        }

    }

奇怪的是,如果我以横向模式启动应用程序,然后切换为纵向模式,标题和栏都在那里,一切都按预期进行。这似乎是首次以纵向模式启动时出现的问题。

解决方案是根据需要使用新的委托方法 topColumnForCollapsingToProposedTopColumn 和 return .primary.secondary

我找到了另一种方法来完成这个:

  1. 打开你的Main.storyboard
  2. 右键单击您的 SplitViewController
  3. 从“compact view”单击并拖动一个新关系到您想要的视图控制器。

对我来说,这意味着我现在有 2 个关系从 SplitViewController 到我的主视图控制器(2 个关系 segues:“master view controller”和“compact view controller”)。但是,嘿,现在可以了。 None 无论我尝试什么,委托的东西都对我有用。

归根结底,Split View Controller 似乎有一个 属性 视图控制器以紧凑模式显示。您可以在故事板中设置它,这将决定在紧凑屏幕中显示哪个视图。