以编程方式使用大小类

时间:2014-08-23 21:30:17

标签: ios interface-builder autolayout ios8 size-classes

我(希望)观看了所有相关的WWDC2014会话视频并阅读了文档,所以这个问题主要是为了证实我的怀疑,但请教育我。

我想要做的是使用自动布局动画视图。这本身不是问题。但这些动画'端点随着方向的不同而变化。我认为我可以使用大小类在轮换时自动移动视图,但Apple的开发人员指南说动画必须以编程方式完成,而且从我可以收集的内容来看,大小类是Interface-Builder-唯一的事情。

我的另一个想法是使用IB提供的顶部/底部自定义布局指南,但这些指南似乎是硬编码的。

我能做的最后一件事是在听完旋转事件后手动更新约束,但这并不是什么新鲜事,我觉得大小类应该不仅仅用于静态接口。我是否过高估计了他们的目的?

TLDR:鉴于视图可以有两个点A和B(由于动画),如何使用大小类或类似的东西移动两个点?

1 个答案:

答案 0 :(得分:22)

在对文档进行了一些挖掘之后,我终于发现了一些可用的东西。 UIContentContainer协议定义willTransitionToTraitCollection(:withTransitionCoordinator:),该方法的第一个参数(UITraitCollection)包含水平和垂直大小类以及UIUserInterfaceIdiom(可用于了解是否该应用程序在iPhone或iPad上运行,但大多数情况下应使用大小类。)

此外,由于iOS 8在横向视图中隐藏了状态栏,因此traitCollectionDidChange(previousTraitCollection:)是在更改发生后调用的相应方法,因此调用此方法时UIApplication.sharedApplication().statusBarHidden的值已更改。例如,对UIScrollView的{​​{1}}非常有用。

最后,如果您需要确切的屏幕尺寸(当然,以点为单位,但上面提到的特征集合也知道像素密度),有contentInset

希望这也有助于其他人。