constraints:
1. 当constrainte变化时(比如activate,deactiviate 约束,改变priority,更改视图结构等),layout engine将重新计算layout,如果某个view的几何信息需要变化,view会得到通知,并且view会将其superview 标记为need layout,此时layout engine中view的几何信息已经更新,但是view本身还没有。
2. 当layout的窗口到来时,首先更新约束, 确保没有需要变化的约束,然后遍历view层级,对所有标记为need layout 的view调用layoutSubviews, uikit将从layout engine中获得subviews的几何信息,并更新。(layoutSubviews 调用在一个很微妙的时点,此时有些view的布局已经更新,有些很没有,一般在这个方法中更新没有约束的view的布局)
drawRect:是用来绘制view的内容,它的实现应该尽可能快,不应该在此更改subviews 的layout信息。
====
遇到过这样一个bug:不知道有人遇到吗?
一个自定义的view,从xib中加载,xib中为其subviews设置了约束。当在屏幕右侧长按的时候,设置view的frame,让其出现在左侧某个位置,当在屏幕左侧长按的时候,出现在右侧。但是有时view出现的位置并不是设置的frame(其他地方没有设置frame),不知道为什么?