layoutSubViews调用时机(转载的基础上添加一些自己的总结)
2015-08-11 10:32
363 查看
(1)什么时候调用layoutSubViews
注意:init不会调用layoutSubViews方法
1、addSubview,view和它的子view的layoutSubView都会被调用。
2、调用setNeedsLayout 调用自己的layoutSubView
3、改变自己的size会调用自己的layoutSubView
4、视图滑动的时候,例如UICollectionView,UITableView,UIScrollView。
5、横屏竖屏切换的时候
6、视图的frame变化的时候
(2)问题:
view1
view1.1是view1的子view
view1.1.1是view1.1的子view
在view1的layoutSubView中初始化view1.1.1并将它设置成view1.1的子view。
当view1.1.1想让view1.1重新布局自己的时候,不得不调用view1的setNeedLayout,照成view1.1.1不断重绘。或者形成roop。
解决方法:在view1.1中的layoutSubView中添加它的子View。
best practice
1、在自己的layoutSubView中添加自己的子View。
2、在layoutSubview中慎用init创建对象。要知道layoutSubview可能被调用多次,有可能对一个view重复创建并布局。不要认为恶俗的使用removeAllSubviews就能解决一切问题。
3、不要在layoutSubView中直接或间接调用setNeedLayout
参考:http://blog.logichigh.com/2011/03/16/when-does-layoutsubviews-get-called/
注意:init不会调用layoutSubViews方法
1、addSubview,view和它的子view的layoutSubView都会被调用。
2、调用setNeedsLayout 调用自己的layoutSubView
3、改变自己的size会调用自己的layoutSubView
4、视图滑动的时候,例如UICollectionView,UITableView,UIScrollView。
5、横屏竖屏切换的时候
6、视图的frame变化的时候
(2)问题:
view1
view1.1是view1的子view
view1.1.1是view1.1的子view
在view1的layoutSubView中初始化view1.1.1并将它设置成view1.1的子view。
当view1.1.1想让view1.1重新布局自己的时候,不得不调用view1的setNeedLayout,照成view1.1.1不断重绘。或者形成roop。
解决方法:在view1.1中的layoutSubView中添加它的子View。
best practice
1、在自己的layoutSubView中添加自己的子View。
2、在layoutSubview中慎用init创建对象。要知道layoutSubview可能被调用多次,有可能对一个view重复创建并布局。不要认为恶俗的使用removeAllSubviews就能解决一切问题。
3、不要在layoutSubView中直接或间接调用setNeedLayout
参考:http://blog.logichigh.com/2011/03/16/when-does-layoutsubviews-get-called/
相关文章推荐
- struts2常用的Constant总结
- web之HTML详解
- Ext 动态添加grid 列数
- hdoj 1233 还是畅通工程【最小生成树 kruskal && prim】
- 深入Spring IOC源码之Resource
- [leetcode-100]Same Tree(C)
- android获取设备屏幕大小的方法
- 20-07-其他对象API(Date类-练习)
- 用c#编写爬虫在marinetraffic下载船只图片
- 设计模式之抽象工厂模式
- PHP面向对象(OOP):PHP5接口技术(interface)
- 转正申请书,要如何写啊?
- eclipse向mysql插入中文乱码问题
- 骆驼命名法转小写分隔
- 日经社説 20150811 御巣鷹30年を機に空の安全を高めたい
- 选择彼此间可协调工作的框架
- GSON学习笔记之初识GSON
- 20-05-其他对象API(Date类-日期对象转成字符串)
- 20-06-其他对象API(Date类-字符串转成日期对象)
- Ubuntu之邮件服务器(Postfix, Dovecot, MySql)