UISplitViewController:从 Compact 旋转到 Regular 时如何防止扩展
UISplitViewController: How to prevent expansion when rotating from Compact to Regular
补充问题有很多答案,即如何防止在从 Regular
到 Compact
接口更改时过渡到 PrimaryOverLay
,例如使用
func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool
在我的例子中,我有一个 iPhone 6+ 的细节视图以纵向显示。当我将设备旋转到水平(Compact
到 Regular
)时,我希望主视图保持隐藏状态。我试过在很多地方将 preferredDisplayMode
设置为 .PrimaryHidden
,但没有明显的影响。谷歌搜索一无所获。
好吧,在我写完问题后,但在发布之前,我绊倒了一个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
}
显然,这是针对一台设备进行的硬编码 - 稍后我将添加一些可用于控制实际返回内容的函数。
不要覆盖 traitCollection
,而是在拆分控制器的父视图控制器中使用方法 setOverrideTraitCollection:forChildViewController:
,就像 Apple 的示例 AAPLTraitOverrideViewController.m
如果您的拆分控制器没有父级,在 Storyboard 中创建父级非常容易。添加一个新的视图控制器,使其成为入口点,添加一个容器视图,删除默认的嵌入视图,而是向拆分控制器添加一个嵌入的 segue,并在 viewDidLoad
中设置覆盖 self.childViewControllers.firstObject
。
补充问题有很多答案,即如何防止在从 Regular
到 Compact
接口更改时过渡到 PrimaryOverLay
,例如使用
func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool
在我的例子中,我有一个 iPhone 6+ 的细节视图以纵向显示。当我将设备旋转到水平(Compact
到 Regular
)时,我希望主视图保持隐藏状态。我试过在很多地方将 preferredDisplayMode
设置为 .PrimaryHidden
,但没有明显的影响。谷歌搜索一无所获。
好吧,在我写完问题后,但在发布之前,我绊倒了一个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
}
显然,这是针对一台设备进行的硬编码 - 稍后我将添加一些可用于控制实际返回内容的函数。
不要覆盖 traitCollection
,而是在拆分控制器的父视图控制器中使用方法 setOverrideTraitCollection:forChildViewController:
,就像 Apple 的示例 AAPLTraitOverrideViewController.m
如果您的拆分控制器没有父级,在 Storyboard 中创建父级非常容易。添加一个新的视图控制器,使其成为入口点,添加一个容器视图,删除默认的嵌入视图,而是向拆分控制器添加一个嵌入的 segue,并在 viewDidLoad
中设置覆盖 self.childViewControllers.firstObject
。