如何让 Storyboard 上的 UISplitViewController 首先显示主视图?

问题描述

我有一个带有情节提要的简单应用,其中只有一个刚从 UI 对象列表中拖放的拆分视图控制器。

当我在 iPhone 模拟器上启动应用程序时,详细视图首先出现。

如何确保在应用启动时显示主视图?有没有办法在故事板上安排它?

解决方法

为了让主视图默认在 iPhone 上折叠,覆盖一些委托方法:

class SplitViewController : UISplitViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }
}

extension SplitViewController : UISplitViewControllerDelegate {

    // The default for this is .secondary!!
    @available(iOS 14.0,*)
    public func splitViewController(_ svc: UISplitViewController,topColumnForCollapsingToProposedTopColumn 
        proposedTopColumn: UISplitViewController.Column) -> UISplitViewController.Column {
        return .primary
    }

    // default is false!
    public func splitViewController(_ splitViewController: UISplitViewController,collapseSecondary secondaryViewController:UIViewController,onto primaryViewController:UIViewController) -> Bool {
        return true
    }
}

以前您会使用 preferredDisplayMode = .primaryOverlay,但现在已弃用。该代码适用于 iOS 14,并且也向后兼容早期的 iO​​S 版本。