1.在以下情况会调用layoutSubviews
- 1.直接调用[self setNeedsLayout];
- 2.addSubview的时候
- 3.当view的size发生改变的时候
- 4.滑动UIScrollView的时候
- 5.旋转Screen会触发父UIView上的layoutSubviews事件
注意:当view的size的值为0的时候,addSubview也不会调用layoutSubviews。当要给这个view添加子控件的时候不管他的size有没有值都会调用。
2.刷新子对象布局
didLoad 里面后需要立即刷新用layoutIfNeeded,到了viewWillAppear可以用setNeedsLayout来刷新子视图布局;
有的时候storyboard里面布局是参照其中某一款机型,其他的根据动态约束来适配,有时候做项目发现storyboard里面设置的宽高 还有比例在didLoad没有立马根据 不同的机器来获得相应的frame,经过怀疑和研究才发现里面也是有很多细节需要思考和研究的;
- 1.-layoutSubviews方法:这个方法,默认没有做任何事情,需要子类进行重写
- 2.-setNeedsLayout方法: 标记为需要重新布局,异步调用layoutIfNeeded刷新布局,不立即刷新,但layoutSubviews一定会被调用
- 3.-layoutIfNeeded方法:如果,有需要刷新的标记,立即调用layoutSubviews进行布局(如果没有标记,不会调用layoutSubviews)
注意:如果要立即刷新,要先调用[view setNeedsLayout],把标记设为需要布局,然后马上调用[view layoutIfNeeded],实现布局在视图第一次显示之前,标记总是“需要刷新”的,可以直接调用[view layoutIfNeeded]