iPad上的UITraitCollection和UISplitViewController

3
我正在使用UISplitViewController设计一个iPad应用程序。我已经配置了UISplitViewController,以使主视图控制器(即左侧较窄的视图)始终可见,通过splitViewController.preferredDisplayMode = .AllVisible
详细视图控制器是一个UICollectionView,我想根据iPad是横屏还是竖屏更改其显示方式。如果是竖屏,我将使集合视图仅显示单列(类似于UITableView)。如果是横屏,有更多的水平屏幕空间可用,那么我将显示多个列。我认为我可以通过实现该集合视图的数据源和委托中的一些条件语句来完成此操作。
我不想仅仅检查设备的方向,因为我希望使用大小类和特征,以便应用程序也可以在iPhone等设备上工作(当遇到相同的特征时)。
我知道每个视图控制器都有一个traitCollection属性,但无论iPad的初始方向如何,当我在viewDidAppear方法中打印出此属性时,它总是指示视图控制器为_UITraitNameHorizontalSizeClass=紧凑,_UITraitNameVerticalSizeClass=常规
如果iPad是竖屏,我会期望这样,但即使它最初是横屏,也会打印出此结果 - 尽管我希望横向和纵向大小类的方向分别为常规常规
此外,如果我在视图控制器中实现了traitCollectionDidChange:方法,则永远不会在旋转时或甚至在展开详细视图控制器的“展开”按钮被点击以隐藏主视图控制器(并将详细视图控制器成为全屏)时调用它。
因此,我的问题是如何检测分割视图控制器内的视图控制器中的大小类/特征更改...或者我做错了什么?
对于任何响应中的示例代码,该应用程序使用Swift编写,目标iOS 9。
感谢您提前给予的任何帮助!

你好,你能找到解决方案了吗? - vinnybad
很遗憾,目前还没有,但我下周会继续做一些工作。 - Skoota
1个回答

0
也许你可以尝试使用以下方法检查self.splitViewControllertraitCollection

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

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


原始行为应该是在第二列中使用其所属的特征集合进行拆分,并对主要的部分进行紧凑水平排列。我认为你的猜测是错误的。请查看以下链接结尾处的内容:http://commandshift.co.uk/blog/2016/04/11/understanding-split-view-controller/ - Cynichniy Bandera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接