我正在使用 UISplitViewController
设计一个 iPad 应用程序.我已经配置了 UISplitViewController
这样主视图 Controller (即左侧较细的 View )始终通过 splitViewController.preferredDisplayMode = .AllVisible
可见。 .
详细 View Controller 是一个 UICollectionView
我想根据 iPad 是纵向还是横向来更改它的显示方式。如果它是纵向的,我会让 Collection View 只显示一个列(类似于 UITableView
)。如果它是横向的,有更多可用的水平屏幕空间,那么我将显示多列。我认为我可以在类中使用一些条件语句来完成此操作,该类实现了该 Collection View 的数据源和委托(delegate)。
我不想只检查设备的方向,因为我更喜欢使用尺寸等级和特征,这样应用程序也可以在 iPhone 等设备上运行(当遇到相同的特征时)。
我知道每个 View Controller 都有一个 traitCollection
属性,但无论我在 viewDidAppear
中打印出此属性时 iPad 的初始方向如何方法它总是说 View Controller 是 _UITraitNameHorizontalSizeClass = Compact, _UITraitNameVerticalSizeClass = Regular
.
如果 iPad 是纵向的,我会期待这一点,但即使它最初是横向的,它也会被打印出来——尽管我希望方向是 Regular
和 Regular
对于水平和垂直尺寸等级。
此外,如果我实现 traitCollectionDidChange:
View Controller 中的方法它永远不会在旋转时调用,或者即使点击详细 View Controller 上的展开按钮以隐藏主视图 Controller (并为详细 View Controller 提供全屏)。
所以,我的问题是如何在 Split View Controller 中检测 View Controller 中的大小类/特征变化……或者我这样做完全错误吗?
为了响应中的任何示例代码,该应用程序是用针对 iOS 9 的 Swift 编写的。
在此先感谢您的帮助!
最佳答案
也许您可以尝试使用以下方法检查 self.splitViewController
的 traitCollection
:
private var isCompactOrientation: Bool {
get {
return self.splitViewController?.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClass.Compact
}
}
如果使用 self.traitCollection.horizontalSizeClass
,它总是返回 .Compact
。
关于ios - iPad 上的 UITraitCollection 和 UISplitViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34554202/