当一个UIView对象调用setNeedsLayout方法时,实际上等同于做了一个标记,告诉系统需要重新布局,但不会立刻执行,直到drawing cycle循环到达该节点时,才会调用layoutSubviews方法重新布局。
layoutIfNeeded允许在drawing cycle循环到达该节点之前,就立刻执行布局刷新调用layoutSubviews方法。换而言之,调用layoutIfNeeded会立即重新布局,前提是对象布局设置已经改变或者在此之前调用setNeedsLayout方法标记,否则layoutIfNeeded并不会触发layoutSubviews的调用。
layoutSubviews在什么情况下调用
- 直接调用[self setNeedsLayout]。(前提是已经加载到父View中)
- 被父控件addSubview的时候。(当view的size的值为0的时候,addSubview也不会调用layoutSubviews。当要给这个view添加子控件的时候不管他的size有没有值都会调用)
- 当view的size发生改变的时候。
- 滑动UIScrollView的时候。
- 旋转Screen会触发父UIView上的layoutSubviews事件。