iOS tableview 刷新时跳动错位

2018/2/12
解决tableview使用estimatedRowHeight方式自动布局时,刷新reloadData会出现跳动错位的问题,
原因可能是因为在刷新的时候,cell的布局在垂直方向可能不清晰,导致cell的高度布局计算错误,所以可以先缓存一份之前的高度

{
    _tableView.estimatedRowHeight = 100;
    _tableView.rowHeight = UITableViewAutomaticDimension;
}
- (NSMutableDictionary *)cellHightDict {
    if (!_cellHightDict) {
        _cellHightDict = [NSMutableDictionary new];
    }
    return _cellHightDict;
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    NSDictionary *dic = [self.viewModel.dataSource safeObjectAtIndex:indexPath.row];
    NSString *cellName = [dic objectForKey:@"cellName"];
    [self.cellHightDict setObject:@(cell.frame.size.height) forKey:[NSString stringWithFormat:@"%@%ld",cellName, (long)indexPath.row]];
}

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSDictionary *dic = [self.viewModel.dataSource safeObjectAtIndex:indexPath.row];
    NSString *cellName = [dic objectForKey:@"cellName"];
    CGFloat height = [[self.cellHightDict objectForKey:[NSString stringWithFormat:@"%@%ld",cellName,  (long)indexPath.row]] floatValue];
    if (height == 0) {
        return 100;
    }
    return height;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 我们在上一篇《通过代码自定义不等高cell》中学习了tableView的相关知识,本文将在上文的基础上,利用sto...
    啊世ka阅读 1,628评论 2 7
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,126评论 8 265
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,133评论 3 119
  • 〖二〗陌上公子,可缓缓归矣? 落荒而逃,一直逃回宿舍楼。坐在椅子上,摸摸自己发烫的脸颊,久久不能平静下来。“一见钟...
    fly飞鱼阅读 323评论 0 3
  • 春风不暖小轩窗,残荷犹怜碧波塘。 乍暖还寒燕影远,欲说还休鸽鸣长。 静披晨曦忆幽梦,总是天赐好时光。 冷气袭人心思...
    雪夜花开阅读 404评论 2 9

友情链接更多精彩内容