在代码中更改大小分类约束的常量,但它恢复为情节提要值

Changing constant of a size-classed constraint within code but it reverts back to storyboard value

我 运行 遇到了使用大小 类 的约束的问题。

在故事板中,我将视图的宽度约束设置为紧凑宽度和常规宽度大小的不同值 类。在视图控制器中,我有一个对该约束的引用,我在 viewDidLoad().

中将其常量设置为零

我遇到的问题是约束的常量恢复为情节提要值,除非在调用 viewDidAppear() 之后。在那之后,约束常量保持在我在源代码中设置的任何值。

即使在 viewWillAppear() 内将约束的常量设置为零仍然会导致约束恢复到情节提要值。

我可以从情节提要中删除约束并在代码中执行此操作,但我想知道是否有人对发生这种情况的原因有任何其他想法,以及是否有不涉及必须删除的修复来自故事板的约束。

这是预期的行为,因为在 viewDidLoad() 中不知道视图宽度

查看此相关回答

我想自动布局会使用默认约束布置所有内容,然后在视图出现之前再次布置所有内容,考虑大小 classes。这就是约束“恢复”的原因 - 它实际上只是第一次被设置为大小 class 的正确值。

无论如何,在修改约束之前在 viewDidLoad() 内调用 view.layoutIfNeeded() 解决了问题。