iOS UI绘制和布局基础解析

来源:互联网 发布:apache derby 编辑:程序博客网 时间:2024/05/22 08:13

layoutSubviews的触发时机:

1、init初始化不会触发layoutSubviews

2、addSubview会触发layoutSubviews

3、view的Frame发生改变会触发layoutSubviews

4、滚动UIScrollView会触发layoutSubviews

5、旋转屏幕会触发父UIView的layoutSubviews

6、改变UIView大小的时候也会触发父UIView的layoutSubviews

   注意:调用layoutSubviews需要调用它的父类方法即 [super layoutSubviews]


UIView的setNeedsDisplay和setNeedsLayout方法比较:

1、首先两个方法都是异步执行的

2、setNeedsDisplay会调用drawRect方法

3、setNeedsLayout会调用layoutSubViews


 -layoutSubviews方法默认没有做任何事情,需要子类进行重写
      -setNeedsLayout方法标记view为需要重新布局,不是立即刷新,但layoutSubviews一定会被调用
      -layoutIfNeeded方法如果有需要刷新的标记,立即调用layoutSubviews进行布局;如果没有标记,则不会调用layoutSubviews

注意:如果要立即刷新要先调用[view setNeedsLayout]再调用[view layoutIfNeeded]

视图第一次显示之前,默认标记为需要刷新,可以直接调用[view layoutIfNeeded]


sizeToFit会自动调用sizeThatFits方法

sizeToFit不应该在子类中被重写,应该重写sizeThatFits

sizeThatFits传入的参数是receiver当前的size,返回一个适合的size

sizeToFit和sizeThatFits方法都没有递归,对subviews不负责只对负责自己


setNeedsLayout会在receiver标上一个需要被重新布局的标记,在下一个周期自动调用layoutSubviews

setNeedDisplay会在receiver标上一个需要被重新绘制的标记,在下一个周期自动重绘

layoutSubviews方法调用先于drawRect


0 0
原创粉丝点击