iOS UITableview的cell自适应

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS UITableview的cell自适应相关的知识,希望对你有一定的参考价值。

背景:这几天做项目,又遇到了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自适应的主要内容,如果未能解决你的问题,请参考以下文章

iOS---cell-自适应高度

UITableView的自定义以及自适应高度

自适应UITableView的Cell高度问题

iOS UITableView

iOS UITableViewableViewCell自适应高度

iOS8+ UITableView自动计算cell高度并缓存