繁体   English   中英

iPad上的UITraitCollection和UISplitViewController

[英]UITraitCollection and UISplitViewController on iPad

我正在使用UISplitViewController设计一个iPad应用程序。 我已经配置了UISplitViewController ,使得主视图控制器(即左侧的较薄视图)始终可以通过splitViewController.preferredDisplayMode = .AllVisible

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

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

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

如果iPad是人像,我会期待这一点,但即使它最初的风景也会打印出来 - 虽然我希望水平和垂直尺寸等级的方向为RegularRegular

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

所以,我的问题是如何在分割视图控制器中的视图控制器中检测大小类/特征变化...或者我是否完全错误?

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

在此先感谢您的帮助!

也许你可以尝试使用以下方法检查traitCollectionself.splitViewController

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM