何时以及为何调用 updateConstraints?

Pär*_*erk 6 uikit ios autolayout

何时以及为何调用 updateConstraints?当覆盖时,需要在覆盖中完成哪些工作?

我已经阅读并观看了很多有关自动布局如何工作的信息,但我似乎无法完全理解它。

您是否会更新保存引用的任何特殊兴趣约束的常量,或者进行自定义,是否从视图中删除所有约束并完全重新创建它们,就像 WWDC 视频中的一个人所做的那样?

mat*_*att 5

关于这个问题的一些想法可以在这里找到:

\n\n
https://oleb.net/blog/2015/08/how-to-use-updateconstraints/\n
Run Code Online (Sandbox Code Playgroud)\n\n

当然,WWDC 视频中偶尔也会有关于此主题的信息。

\n\n

但总的来说,答案可能是:不要覆盖updateConstraints。在正常情况下,它不会经常被调用,因此,如果您也调用了它setNeedsUpdateConstraints,则只需覆盖它,结果可能是一个不必要的混乱和复杂的体系结构。一般情况下不需要覆盖updateConstraints。WWDC 2018 关于自动布局的视频显示,此类覆盖经常被错误地编写,只会导致一堆效率极低的布局“混乱”。如果您需要更改约束,只需在需要更改时更改它们即可。

\n\n

正如文档现在所说:

\n\n
\n

在发生影响的更改后立即更新约束几乎总是更干净、更容易。例如,如果您想要更改约束以响应按钮点击,请直接在 button\xe2\x80\x99s 操作方法中进行更改。\n 仅当更改就地约束太慢时才应重写方法,或者当视图产生大量冗余更改时。

\n
\n\n

最后一句话指的是一种极其罕见的情况,在任何情况下你都不可能知道如何正确实施updateConstraints以提高效率。所以不要。

\n