我在viewDidLoad
/中设置了约束loadView
(我的目标是iOS> = 6)。updateViewConstraints
对于更改约束的值很有用,例如,如果某些约束取决于屏幕的方向(我知道,这是一种不好的做法),则可以constant
使用此方法进行更改。
在从39:22开始的“ iOS和OS X自动布局简介”(WWDC 2012)viewDidLoad
会话中显示了添加约束。我认为这是在演讲中说过的事情之一,但是没有出现在文档中。
更新:我注意到在View Controllers中提到了在Resource Management中设置约束的内容:
如果您喜欢以编程方式创建视图,而不是使用情节提要,则可以通过重写视图控制器的loadView
方法来实现。您对该方法的实现应执行以下操作:
(...)
3.如果使用的是自动布局,请为刚创建的每个视图分配足够的约束,以控制视图的位置和大小。否则,请实现viewWillLayoutSubviews
和
viewDidLayoutSubviews
方法来调整视图层次结构中子视图的框架。请参阅“调整视图控制器的视图大小”。
更新2:2015年WWDC期间苹果给予了新的解释的updateConstraints
和updateViewConstraints
推荐的用法:
确实,所有这些都是视图有机会在下一次布局通过时及时更改约束的方法,但实际上并不需要。
理想情况下,所有初始约束设置都应在Interface Builder内部进行。
或者,如果您真的发现需要以编程方式分配约束,则诸如viewDidLoad之类的位置会更好。
更新约束实际上只是针对需要定期重复的工作。
同样,当您发现需要更改约束时,这很简单。相反,如果您将该逻辑与其他与之相关的代码分开,然后将其移入一个单独的方法中,然后在以后执行,则代码将变得难以遵循,因此您将难以维护,其他人很难理解。
那么什么时候需要使用更新约束?
好吧,归结为性能。
如果您发现仅更改约束条件太慢,那么更新约束条件可能会为您提供帮助。
事实证明,在更新约束中更改约束实际上比在其他时间更改约束要快。
这样做的原因是因为引擎能够将在此传递中发生的所有约束更改视为批处理。