ios - iPad 上的 UITraitCollection 和 UISplitViewController

标签 ios uisplitviewcontroller size-classes uitraitcollection

我正在使用 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 是纵向的,我会期待这一点,但即使它最初是横向的,它也会被打印出来——尽管我希望方向是 RegularRegular对于水平和垂直尺寸等级。

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

所以,我的问题是如何在 Split View Controller 中检测 View Controller 中的大小类/特征变化……或者我这样做完全错误吗?

为了响应中的任何示例代码,该应用程序是用针对 iOS 9 的 Swift 编写的。

在此先感谢您的帮助!

最佳答案

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

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

如果使用 self.traitCollection.horizo​​ntalSizeClass,它总是返回 .Compact

关于ios - iPad 上的 UITraitCollection 和 UISplitViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34554202/

相关文章:

ios - 使用下一个和上一个UIButton切换UITextView/UILabel中的不同文本

ios - UINavigationController 和 SplitViewController

ios - 均匀间隔多个 View 使用尺寸等级

ios - UIActivityViewController 稍后设置图像?

ios - Unity3d UI 事件在 iOS 设备上不起作用

ios - 使用HLS(Http live streaming)是否需要提供 "Audio-only"流?

ios - 有没有办法以编程方式在 Cocoa 中强制水平 Split View?

ios - 进入多任务时更改 UISplitViewController displayMode 属性? (iOS 14)

xcode - 如何将尺寸类别自动布局重置回其默认值?

ios - Storyboard 中的 UIScrollView 不适用于 iOS 8 大小类和自动布局