以编程方式设置AutoLayout大小类?

Jos*_*ane 14 objective-c autolayout nslayoutconstraint ios8

使用iOS 8和Xcode 6,在故事板中我们现在有了屏幕尺寸网格,让我们选择尺寸等级.您可以在哪里为不同的屏幕尺寸选择布局格式.

我发现这非常有用,因为它允许我设置基本约束,然后为每个屏幕大小设置唯一的约束.

我的问题是,你能以编程方式执行此操作吗?我NSLayoutConstraint正常创建我,但我需要能够为不同的屏幕尺寸指定不同的约束.

flo*_*flo 12

iOS 8引入了该active属性NSLayoutConstraint.它允许您激活或停用约束.还有激活/停用多个约束的方法.

+ (void)activateConstraints:(NSArray *)constraints
+ (void)deactivateConstraints:(NSArray *)constraints
Run Code Online (Sandbox Code Playgroud)
  • 以编程方式创建数组时,请将约束保留在数组中.
  • 为您需要的每个布局创建一个数组.
  • 从内部激活/取消激活所需的任何约束 willTransitionToTraitCollection


mc0*_*c01 1

这有点令人困惑并且很难在文档中找到,因为“大小类”实际上并不是像 NSObject 这样的“类”。它们实际上是在名为UIUserInterfaceSizeClass的枚举/类型定义中定义的

获取视图的水平和垂直尺寸类的方法是使用UITraitCollection

UITraitCollection 的类/类型方法允许您根据特定的显示比例(例如是否为视网膜)、从一系列其他特征集合、使用 UI 习惯用法 (iPad/iPhone) 或特定的水平和垂直选项(紧凑)创建一个特征集合。 ,常规),但说实话,我还不确定你会如何使用它......

这个问题讨论了当traitCollection改变时更新约束,使用willTransitionToTraitCollection(newCollection: UITraitCollection!, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator!)

你是对的, UITraitCollection 及其属性都是只读的,但显然你可以出于某种原因创建一个新的集合,并在 TraitCollection 更改时处理布局更改。

上一个问题非常相似,并链接到有关使用自适应布局的 Apple 文章。另请查看 WWDC 视频“使用 UIKit 构建自适应应用程序”。