tableviewcell 动态计算cell高度导致tableview滑动卡顿怎么办??
APP中要求做如图所示的效果 这个是一个带有多条回复的评论页面
麻烦点在于 评论cell中 需要算出评论cell的高度,,如果有回复的需要计算每个回复cell的高,,在算出评论的高 相加得到评论cell的高度,,,如果把这些繁琐的工作放在
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
协议中,,cell每次出现 都会计算一次评论cell 回复cell的高度 造成滑动卡顿
其实有一种简单地方法 可以使这些高度在数据加载完时只计算一次,,再去刷新tableview,,那就是把所有的高度的计算都放到数据请求里,,因为是耗时操作和数据请求一同放进多线程
/// 提前计算好评论cell的高度
NSString *pcellh = [NSString stringWithFormat:@"%f",[LoadTheHeightTool loadPingLunTableViewCellHeight:body]];
/// 提前计算好回复tableview的高度
NSString *hcellh = [NSString stringWithFormat:@"%f",[LoadTheHeightTool loadHuiFuTableViewHeight:body]];
NSMutableDictionary *celldic = [NSMutableDictionary dictionaryWithObjectsAndKeys:pcellh,@"ptabaleCellH",hcellh,@"htableH", nil];
[weakself.cellHeightArr addObject:celldic];
经过处理,,cell每次出现 高度都有了固定的数值,,不在反复走计算高度的方法,,可以有效缓解滑动卡顿问题
计算高度的时候,,尽量保证能计算一次就不计算两次
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
NSDictionary *dic = self.cellHeightArr[indexPath.row];
NSString *cellh = dic[@"ptabaleCellH"];
return [cellh floatValue];
}
当然这种方法也有局限性,,数据量少自然没问题,,当回复数很大的时候,,优化就不是很明显了。。如有更好的方法 望能提供出来一起探讨。。。。。。。