UISplitViewController:从Compact转为Regular时如何防止扩展

时间:2015-10-15 14:35:46

标签: ios uisplitviewcontroller uisplitviewdelegate uitraitcollection

补充问题有很多答案,即如何防止从PrimaryOverLayRegular界面更改转换为Compact,例如使用

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

在我的情况下,我有一个iPhone 6+,其中详细视图以纵向显示。当我将设备旋转到水平(CompactRegular)时,我希望主视图保持隐藏状态。我已尝试在许多地方设置preferredDisplayMode.PrimaryHidden,但它没有明显的影响。谷歌搜索没有任何结果。

2 个答案:

答案 0 :(得分:4)

好吧,在我写完问题之后,但在发布之前,我绊倒了possible solution,这是为了覆盖拆分视图控制器引用的特征集合。

我接受了这个想法并决定继承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
  }

显然这是一个设备的硬编码 - 稍后我会去添加一些我可以用来控制实际返回的功能。

答案 1 :(得分:1)

请勿覆盖traitCollection,而应在拆分控制器的父视图控制器中使用方法setOverrideTraitCollection:forChildViewController:,例如Apple的示例AAPLTraitOverrideViewController.m

如果拆分控制器没有父代,那么在情节提要中创建父代非常容易。添加一个新的视图控制器,使其成为入口点,添加一个容器视图,删除默认的嵌入式视图,然后向分割控制器添加一个嵌入序列,并在self.childViewControllers.firstObject中的viewDidLoad上设置替代。 / p>