什么是最容易获得UIViewController的size类?

Ján*_*nos 7 ios size-classes

在WWDC 2014平台国家联盟演讲中,Apple工程师介绍了size classes他说我们可以将iPhone大小的UI视为一个compact size class和iPad大小类一样regular size class.但是大小类不受特定设备的限制.他们比那更普遍.如果一个视图控制器看起来像一个iPhone - 它的纵横比与它类似 - 它将具有一个紧凑的大小类.

是否可以在某个时间查看viewcontroller使用的大小类?我发现模拟器内容和Interface Builder预览之间存在矛盾,我想更深入地了解它为什么会发生.

EhT*_*hTd 11

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

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

po self.traitCollection
Run Code Online (Sandbox Code Playgroud)

或者听听过渡:

首先使用UIContentContainer协议

@interface ViewController : UIViewController<UIContentContainer>
Run Code Online (Sandbox Code Playgroud)

然后实现willTransitionToTraitCollection:

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

}
Run Code Online (Sandbox Code Playgroud)

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

<UITraitCollection: 0x7f9ad152f320; _UITraitNameUserInterfaceIdiom = Phone,     _UITraitNameDisplayScale = 2.000000, _UITraitNameHorizontalSizeClass = Compact, _UITraitNameVerticalSizeClass = Compact, _UITraitNameTouchLevel = 0, _UITraitNameInteractionModel = 1>
Run Code Online (Sandbox Code Playgroud)

和肖像:

<UITraitCollection: 0x7f9ad142d770; _UITraitNameUserInterfaceIdiom = Phone, _UITraitNameDisplayScale = 2.000000, _UITraitNameHorizontalSizeClass = Compact, _UITraitNameVerticalSizeClass = Regular, _UITraitNameTouchLevel = 0, _UITraitNameInteractionModel = 1>
Run Code Online (Sandbox Code Playgroud)

从那里,你可以看到它使用水平和垂直尺寸紧凑级的景观,但使用普通尺寸班方式垂直时的画像.