码迷,mamicode.com
首页 > 移动开发 > 详细

iOS UITableview的cell自适应

时间:2016-10-28 02:03:47      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:img   显示   改变   tab   代理   应该   计算   ios ui   height   

背景:这几天做项目,又遇到了cell的自适应高度问题

首先我们必须要知道UITableViewcell 的代理执行顺序,在iOS7出现了一个代理方法叫:tableView: estimatedHeightForRowAtIndexPath:,首先我们要知道在使用UITableViewcell的时候必须计算cell的高度,那如果cell的内容是动态的呢?这个时候我们就必须动态的返回高度了,这就回到了我们项目中遇到的问题。知道了这一点,接下来我们就必须知道UITableViewde 的代理方法的执行顺序,分别如下图:

技术分享

 

可以看到在执行cellForRowAtIndexPath之前是会先执行heightForRowAtIndexPath的,也就是说有可能cell不存在的时候就调用了heightForRowAtIndexPath,这样是无法满足项目要求的,直到iOS7出现的新的API,这就是上面讲的:tableView: estimatedHeightForRowAtIndexPath:,这个代理方法回给cell的一个预估高度,如果实现了这个方法,也就意味着UITableView的代理方法的执行顺序的改变,如下图:

技术分享

 

 稍微整理一下就会得到如下结论:

  1. 首先tableView会先向代理拿得到每个cell的预估高度(estimatedHeightForRow...方法),并且拿这个高度去计算整个tableView应该显示的范围
  2. 根据每行预估的高度,算出一屏显示的cell的个数,并先对这些cell(调用cellForRow...方法)进行绘制
  3. 在绘制时拿到cell的真实高度,然后放在heightForRow...方法里面拿给tabelView去用
  4. 屏幕滚动(有cell进入屏幕)的时候,仍然会调用绘制以及获取真实高度的方法.

简单点说,就是预估高度用来让tableView心里有个底,把cell先绘制出来,但最后实际的cell高度还是会从heightForRow...方法中获取.


参考文献:

 

文/CoderAO(简书作者)
原文链接:http://www.jianshu.com/p/6ab92579fcf1
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

iOS UITableview的cell自适应

标签:img   显示   改变   tab   代理   应该   计算   ios ui   height   

原文地址:http://www.cnblogs.com/ErShaoYe/p/6005959.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!