【发布时间】:2015-07-11 22:30:30
【问题描述】:
如果您使用 Storyboard,您可以使用 Interface Builder 向视图添加自动布局约束,并且您可以非常轻松地为所需的每个大小类别添加不同的 constant 值。当您运行应用并在尺寸类别之间切换时,UI 将自动更新并重新定位以尊重新尺寸类别的正确 constant 值。
我的问题是如何以编程方式获得相同的行为?
当您创建NSLayoutConstraint 时,您不能为不同的尺寸等级设置不同的值。因此,我认为这将是一个更加手动的过程。例如,您必须在 viewDidLoad 中为当前尺寸类创建具有正确值的约束,然后您必须使用 willTransitionToTraitCollection 或 updateConstraints 并检测新的尺寸类,然后更改 @ 987654327@s 适用于新尺寸类的所有约束,然后在需要重新定位的视图上调用 layoutIfNeeded。那将是很多代码,您优化的大小类越多,情况就越糟。难道没有更简单和/或更有效的方式来以编程方式获取该行为吗?
请注意,此问题不仅限于自动布局约束,而是任何可以根据大小类更改其属性值的对象。例如,为不同的大小等级设置UILabel的字体。
【问题讨论】:
-
我没有找到干净的解决方案。必须在 viewDidLoad 中以及在检测到大小类更改之后进行优化。 @SwiftArchitect
-
可惜苹果没有提供
addConstraint:forSizeClasses或者activateConstraints:forSizeClasses... -
@SwiftArchitect 现在提交雷达 :)