3

补充问题有很多答案,即如何防止转换到PrimaryOverLayRegularCompact接口更改,例如使用

func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool

就我而言,我有一部 iPhone 6+,其细节视图以纵向显示。当我将设备旋转到水平(CompactRegular)时,我希望主视图保持隐藏状态。我已经尝试在很多地方将其设置为preferredDisplayMode.PrimaryHidden但它没有明显的影响。谷歌搜索一无所获。

4

2 回答 2

3

好吧,在我写完问题之后,但在发布之前,我想到了一个可能的解决方案,即覆盖拆分视图控制器引用的特征集合。

我接受了这个想法并决定子类UISplitViewController化并覆盖该traitCollection属性。那成功了:

final class MySplitViewController: UISplitViewController {
  var didOnce = false
  override var traitCollection: UITraitCollection {
    let old = super.traitCollection
    let change = UITraitCollection(horizontalSizeClass: .Compact)
    let new = UITraitCollection(traitsFromCollections: [old, change])
    return new
  }

显然,这是针对一台设备进行硬编码的——稍后我将添加一些函数来控制实际返回的内容。

于 2015-10-15T14:35:45.807 回答
1

不要覆盖,而是在拆分控制器的父视图控制器中traitCollection使用该方法,例如 Apple 的示例AAPLTraitOverrideViewController.msetOverrideTraitCollection:forChildViewController:

如果您的拆分控制器没有父级,则在情节提要中创建父级非常容易。添加一个新的视图控制器,使其成为入口点,添加一个容器视图,删除默认的嵌入视图,而是向拆分控制器添加一个嵌入 segue 并将覆盖设置为self.childViewControllers.firstObjectin viewDidLoad

于 2019-12-23T10:42:14.067 回答