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
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
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- iOS推送的那些事
- IOS 改变键盘颜色代码