在Apple的文档中指出,不支持直接将UISplitViewController.DisplayMode.PrimaryOnly设置为splitViewController.preferredDisplayMode。但是,你可以使用其他方法来实现这个功能。
一种方法是通过自定义UISplitViewControllerDelegate来实现这个功能。你可以在委托方法splitViewController(_:collapseSecondary:onto:)中判断如果preferredDisplayMode为.primaryOnly,则返回true,否则返回false。这样,在split视图控制器折叠次要视图控制器时,它将始终只显示主要视图控制器。
下面是一个示例代码:
class SplitViewControllerDelegate: NSObject, UISplitViewControllerDelegate {
func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
if splitViewController.preferredDisplayMode == .primaryOnly {
return true
} else {
return false
}
}
}
// 在你的视图控制器中
let splitViewController = UISplitViewController()
let delegate = SplitViewControllerDelegate()
splitViewController.delegate = delegate
splitViewController.preferredDisplayMode = .primaryOnly
这段代码中,我们创建了一个自定义的SplitViewControllerDelegate类,实现了UISplitViewControllerDelegate协议,并在splitViewController(_:collapseSecondary:onto:)方法中检查了splitViewController.preferredDisplayMode的值。根据需要,我们返回true或false来控制split视图控制器的展示。