7

在 WWDC 2014 Platform State of the Union 演讲中,Apple 工程师介绍了size classes他说我们可以将 iPhone 尺寸的 UI 视为一个compact size class,iPad 尺寸类视为一个regular size class. 但是尺寸等级不受特定设备的限制。它们比那更普遍。如果一个视图控制器看起来像一个 iPhone——它的纵横比与它相似——它就会有一个紧凑的尺寸类。

是否可以在某个时间查看 viewcontroller 使用了哪个尺寸类?我发现模拟器内容和 Interface Builder 预览之间存在矛盾,我想深入研究一下,看看为什么会这样。

4

1 回答 1

11

我目前正在研究如何以编程方式使用大小类,这里有一些对您有用的发现:

找出最简单的方法是检查视图控制器 traitCollection

po self.traitCollection

或收听过渡:

首先使用 UIContentContainer 协议

@interface ViewController : UIViewController<UIContentContainer>

然后实现willTransitionToTraitCollection

- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator
{

}

newCollection 元素包含可用于您的目的的信息,这是将 iPhone 6 旋转到横向时返回的信息:

<UITraitCollection: 0x7f9ad152f320; _UITraitNameUserInterfaceIdiom = Phone,     _UITraitNameDisplayScale = 2.000000, _UITraitNameHorizontalSizeClass = Compact, _UITraitNameVerticalSizeClass = Compact, _UITraitNameTouchLevel = 0, _UITraitNameInteractionModel = 1>

和肖像:

<UITraitCollection: 0x7f9ad142d770; _UITraitNameUserInterfaceIdiom = Phone, _UITraitNameDisplayScale = 2.000000, _UITraitNameHorizontalSizeClass = Compact, _UITraitNameVerticalSizeClass = Regular, _UITraitNameTouchLevel = 0, _UITraitNameInteractionModel = 1>

从那里你可以看到它对横向和垂直使用紧凑尺寸类,但在纵向使用常规尺寸类。

于 2014-09-30T17:34:59.473 回答