3

我正在使用UISplitViewController. 我已经配置了UISplitViewController这样的主视图控制器(即左侧的较薄视图)始终可以通过splitViewController.preferredDisplayMode = .AllVisible.

详细视图控制器是一个UICollectionView,我想根据 iPad 是纵向还是横向来更改它的显示方式。如果是纵向,我会让集合视图只显示一列(类似于 a UITableView)。如果它是横向的,有更多可用的水平屏幕空间,那么我将显示多个列。我想我可以在实现该集合视图的数据源和委托的类中使用一些条件来做到这一点。

我不想只检查设备的方向,因为我更喜欢使用尺寸类和特征,以便应用程序也可以在 iPhone 等上运行(当遇到相同的特征时)。

我知道每个视图控制器都有一个traitCollection属性,但是当我在方法中打印出这个属性时,无论 iPad 的初始方向如何,viewDidAppear它总是说视图控制器是_UITraitNameHorizontalSizeClass = Compact, _UITraitNameVerticalSizeClass = Regular.

如果 iPad 是纵向的,我会预料到这一点,但即使它最初是横向的,也会打印出来 - 尽管我希望该方向是水平RegularRegular垂直尺寸类。

此外,如果我traitCollectionDidChange:在视图控制器中实现该方法,它永远不会调用旋转,或者即使点击详细视图控制器上的展开按钮以隐藏主视图控制器(并为详细视图控制器提供全屏显示)。

所以,我的问题是如何检测拆分视图控制器中视图控制器的大小类/特征变化......或者我这样做完全错了吗?

出于响应中任何示例代码的目的,该应用程序是用面向 iOS 9 的 Swift 编写的。

提前感谢您的帮助!

4

1 回答 1

0

也许您可以尝试使用以下方法traitCollection进行检查:self.splitViewController

private var isCompactOrientation: Bool {
    get {
        return self.splitViewController?.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClass.Compact
    }
}

如果使用self.traitCollection.horizontalSizeClass,它总是返回.Compact

于 2016-06-30T06:54:25.710 回答