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

来源:互联网 发布:通达信软件 苹果 编辑:程序博客网 时间:2024/06/10 22:54

APP中要求做如图所示的效果  这个是一个带有多条回复的评论页面 


麻烦点在于 评论cell中 需要算出评论cell的高度,,如果有回复的需要计算每个回复cell的高,,在算出评论的高 相加得到评论cell的高度,,,如果把这些繁琐的工作放在

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

协议中,,cell每次出现 都会计算一次评论cell 回复cell的高度  造成滑动卡顿



其实有一种简单地方法 可以使这些高度在数据加载完时只计算一次,,再去刷新tableview,,那就是把所有的高度的计算都放到数据请求里,,因为是耗时操作和数据请求一同放进多线程

 /// 提前计算好评论cell的高度

     NSString *pcellh = [NSStringstringWithFormat:@"%f",[LoadTheHeightToolloadPingLunTableViewCellHeight:body]];

 /// 提前计算好回复tableview的高度

     NSString *hcellh = [NSStringstringWithFormat:@"%f",[LoadTheHeightToolloadHuiFuTableViewHeight:body]];

     NSMutableDictionary *celldic = [NSMutableDictionarydictionaryWithObjectsAndKeys: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];

}


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









原创粉丝点击