cell行高的动态计算

UITableView控件是我们日常开发中经常使用的控件之一,cell动态高度的计算也是老生常谈的问题,我们一般计算高度的方法都是,cell中得各个控件的高度计算出来,然后给外界抛出一个接口,用来获取cell高度,但是tableView返回高度的代理方法,总是频繁的调用,我们还要注意不要在主线程使用过于复杂的算法以免阻塞主线程.

  1. 预加载
    苹果在iOS7之后给我们新增一个API
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(7_0);

下面我们先来了解一下tableView计算高度的机制.
tableView在渲染之前会不停的调用heightForRowAtIndexPath方法返回对应cell高度,然后得到tableView的总高度,这意味在显示tableView之前需要进行大量的高度计算(这不是一屏,是计算所有数据的高度,并且是在主线程,很有可能会造成加载过慢,卡顿等现象)。有人问为什么不能等页面滑动到某个 cell 的时候,再计算高度呢?答案就是,tableView有一个小的ScrollIndicator滚动条,高度是用来确定滚动条的大小和位置的。
estimatedHeightForRowAtIndexPath这个方法的意思就是返回一个cell 高度的估计值,这样tableView就直接取估值用来确定滚动条的信息而不需要调用多次算高的代理方法,这样就可以大幅度提高tableView的加载速度。

需要注意的是:1.它是IOS7之后才有的API。2.如果你的业务需求需要你一开始使用到tableView的contentSize或者contentOffset,那么请慎用。
2.autoLayout自动算高
参考:https://my.oschina.net/hantianyu/blog/516244

你可能感兴趣的:(cell行高的动态计算)