何时以及为何调用 updateConstraints?

Posted

技术标签:

【中文标题】何时以及为何调用 updateConstraints?【英文标题】:When and why is updateConstraints called? 【发布时间】:2016-07-20 06:45:38 【问题描述】:

并且在覆盖时,覆盖意味着要完成什么样的工作?

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

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

【问题讨论】:

【参考方案1】:

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

https://oleb.net/blog/2015/08/how-to-use-updateconstraints/

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

但总的来说,答案可能是:不要覆盖updateConstraints。在正常情况下它不会经常被调用,所以如果你也调用setNeedsUpdateConstraints,你只需要覆盖它,结果可能是一个不必要的混乱和复杂的架构。通常不需要updateConstraints 覆盖。 WWDC 2018 关于自动布局的视频显示,此类覆盖通常写得不正确,只会导致一堆效率低下的布局“流失”。如果您需要更改约束,只需在需要更改的地方更改它们即可。

正如文档现在所说:

在影响更改发生后立即更新约束几乎总是更简洁、更容易。例如,如果您想更改约束以响应按钮点击,请直接在按钮的操作方法中进行更改。 仅当更改约束太慢或视图产生大量冗余更改时,才应覆盖 this 方法。

最后一句话指的是一种非常罕见的情况,无论如何,您不太可能知道如何正确实施updateConstraints 以提高效率。所以不要。

【讨论】:

以上是关于何时以及为何调用 updateConstraints?的主要内容,如果未能解决你的问题,请参考以下文章

何时以及为何使用 &?、=?、@?在 AngularJS 中?

何时以及为何在堆 C++ 上声明成员变量

XML 何时以及为何优于 CSV? [关闭]

为 Qt 注册自定义类型时,何时、何地以及为何使用命名空间

深入了解 updateConstraints() 方法的实现

自动布局:updateConstraints 不会在方向更改时得到调用