补充问题有很多答案,即如何防止从PrimaryOverLay
到Regular
界面更改转换为Compact
,例如使用
func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool
在我的情况下,我有一个iPhone 6+,其中详细视图以纵向显示。当我将设备旋转到水平(Compact
到Regular
)时,我希望主视图保持隐藏状态。我已尝试在许多地方设置preferredDisplayMode
到.PrimaryHidden
,但它没有明显的影响。谷歌搜索没有任何结果。
答案 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>