一尘不染

打开UISplitViewController到主视图而不是详细信息

swift

我有一个目标iPhone 6应用程序的拆分视图界面。在首次启动该应用程序时,它将打开到“详细信息视图”。我希望它可以打开“主视图”。我努力了:

self.splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.PrimaryOverlay

这是在其他地方建议的,但是它似乎没有任何作用,并且在启动时不会打开Master视图。我还尝试将以下行添加到我的AppDelegate中:

splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:

但是,尽管返回true或false另一个先前的堆栈溢出问题,我还是没有成功。

我确实在Xcode中启动了示例Master-Detail应用程序,并基于splitViewController将其加载到Master视图中。但是,我不确定如何以更复杂的布局进行这项工作。


阅读 214

收藏
2020-07-07

共1个答案

一尘不染

迅速

UISplitViewController在纵向细节上方显示主视图并不是要显示主视图,而是要在主视图下方以全角显示“细节”视图。

[iPhone上的肖像中的UISplitViewController显示了详细的VC而不是master是关于合拢机制的原理。

目前的答案是:

  • 母版→详细信息 (紧凑宽度)
    • iPhone 4s,5、5s,SE,6、6s,7(任何方向)
    • iPod Touch
    • 任何iPhone Plus(肖像)
  • 并排 (所有其他尺寸)
    • iPad
    • 任何iPhone Plus(横向)

您必须设置preferredDisplayMode。您想要的是 .primaryVisible 它是否存在!如果只适合1个视图 (紧凑宽度)
,则使用.allVisibleiOS选择。以该大小,下面的代码将选择。Detail __Master

关键是要改变 双方preferredDisplayMode.allVisible_和_返回truecollapseSecondary:onto

class PrimarySplitViewController: UISplitViewController,
                                  UISplitViewControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
        self.preferredDisplayMode = .allVisible
    }

    func splitViewController(
             _ splitViewController: UISplitViewController,
             collapseSecondary secondaryViewController: UIViewController,
             onto primaryViewController: UIViewController) -> Bool {
        // Return true to prevent UIKit from applying its default behavior
        return true 
    }
}
2020-07-07