我正在设计一个使用UISplitViewController的iPad应用程序。我已经对UISplitViewController进行了配置,以便通过splitViewController.preferredDisplayMode = .AllVisible始终可以看到主视图控制器(即左侧较薄的视图)。
细节视图控制器是一个UICollectionView,我想根据iPad是纵向还是横向来更改它的显示方式。如果它是纵向的,我将使集合视图只显示一列(类似于UITableView)。如果它是横向的,有更多的水平屏幕可用空间,那么我将显示多列。我想我可以在实现数据源和集合视图委托的类中使用几个条件来实现这一点。
我不想只检查设备的方向,因为我更喜欢使用大小类和特征,这样应用程序也可以在iPhone上工作,等等(当遇到相同的特征时)。
我知道每个视图控制器都有一个traitCollection属性,但是不管iPad的初始方向如何,当我在viewDidAppear方法中打印出这个属性时,它总是说视图控制器是_UITraitNameHorizontalSizeClass = Compact, _UITraitNameVerticalSizeClass = Regular。
如果iPad是纵向的,我会想到这一点,但即使它最初是横向的,这也是打印出来的-尽管我希望水平和垂直大小的类的方向是Regular和Regular。
另外,如果我在视图控制器中实现traitCollectionDidChange:方法,它在旋转时永远不会被调用,或者即使点击细节视图控制器上的展开按钮来隐藏主视图控制器(并使细节视图控制器全屏显示)。
那么,我的问题是,我如何在拆分视图controller...or中检测视图控制器中的大小、类别/特征的变化?我这样做完全错了吗?
对于响应中的任何示例代码,该应用程序都是用Swift针对iOS 9编写的。
提前感谢您的帮助!
发布于 2016-06-30 14:54:26
也许您可以尝试使用以下方法检查self.splitViewController的traitCollection:
private var isCompactOrientation: Bool {
get {
return self.splitViewController?.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClass.Compact
}
}如果使用self.traitCollection.horizontalSizeClass,它总是返回.Compact。
https://stackoverflow.com/questions/34554202
复制相似问题