您的位置:首页 > 产品设计 > UI/UE

iOS UI绘制和布局基础解析

2016-04-08 16:56 465 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息