tableviewcell 动态计算cell高度导致tableview滑动卡顿怎么办??

在带有回复评论的页面中,计算评论及回复Cell的高度会导致UITableView滑动卡顿。通过将高度计算移到数据加载时的多线程中,预先存储高度值,可以避免滑动时重复计算,从而改善性能。使用NSMutableDictionary存储每个Cell的高度,并在UITableViewDataSource中直接获取,减少计算次数,有效缓解滑动卡顿。然而,当回复数量很大时,该方法的优化效果可能不明显。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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];

}


当然这种方法也有局限性,,数据量少自然没问题,,当回复数很大的时候,,优化就不是很明显了。。如有更好的方法 望能提供出来一起探讨。。。。。。。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值