Layout事件调用

这是一篇对偶然看的一段讲解Layout事件调用顺序的英文文章的大致翻译。原文链接:http://www.devdiv.com/layout_-blog-6399-51990.html,好像已经打开不了,囧。讲解的还算比较清晰,记录下来,留着以后查看~

updateConstraints

在用autoLayout时,要立即出发updateConstraints,调用updateConstraintsIfNeeded,在没用autoLayout时要触发updateConstraints,调用setNeedsUpdateConstraints,但是不应该手动调用updateConstraints。在重写updateConstraints时一定要调用[super updateConstraints],当有约束在运行时会动态的添加或删除时,就重写这个方法在里面处理。updateConstraints的执行并不会导致界面真的发生变化。

layoutSubviews

界面发生变化还是要触发layoutSubviews,调用layoutIfNeeded立即触发layoutSubviews,或者调用setNeedsLayout在系统合适的时候去触发layoutSubviewslayoutSubviews中会真正的去做布局处理,所以重写的时候要调用[super layoutSubviews]。如果系统调整完frame时还想再做处理,就重写它,然后处理完再调用一次[super layoutSubviews]

这里在调用时不要搞错了,是调用setNeedsLayout,而不是setNeedsDisplay。调用setNeedsDisplay会触发drawRect,如果你的界面在drawRect中做了绘制,那要立即改变时,就调用setNeedsDisplay