在代码中更改大小分类约束的常量,但它会恢复到故事板值

时间:2017-07-19 22:03:55

标签: ios swift xcode xcode-storyboard

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

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

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

即使在约viewWillAppear()内将约束常量设置为零,仍会导致约束恢复为故事板值。

我可以从故事板中删除约束并在代码中执行,但我想知道是否有人对于为什么会发生这种情况有任何其他想法,如果有一个修复不涉及必须删除来自故事板的约束。

2 个答案:

答案 0 :(得分:1)

我猜autolayout使用默认约束将所有内容排除在外,然后在视图出现之前将所有内容重新排出,以计算大小类。这就是约束“恢复”的原因 - 它实际上只是第一次被设置为size类的正确值。

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

答案 1 :(得分:0)

这是一种预期的行为,因为viewDidLoad()

时未知视图宽度

查看此相关回答https://stackoverflow.com/a/16421170/7626803