TableView 刷新后调用 reloadData 出现上移

网上搜索 TableView 刷新后,出现偏移或抖动的现象,大部分表示是 iOS 11 后,TableView 的问题,只需要设置以下代码就可以:

_tableview.estimatedRowHeight = 0;
_tableview.estimatedSectionHeaderHeight = 0;
_tableview.estimatedSectionFooterHeight = 0;

但是这个并不能解决我的问题!
思来想去,我与众多博主不同的是,我使用的是 cell 动态计算高度。
有了方向后,一番查找~终于找到了一个完美的解决方案!!


NSMutableDictionary *cellHeightsDictionary;
 
cellHeightsDictionary = @{}.mutableCopy;
 
tableView.rowHeight = UITableViewAutomaticDimension;
 
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    [cellHeightsDictionary setObject:@(cell.frame.size.height) forKey:indexPath];
}
 
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSNumber *height = [cellHeightsDictionary objectForKey:indexPath];
    if (height) return height.doubleValue;
    return UITableViewAutomaticDimension;
}

给预估计一个精确的 cell 高度,就可以解决这个问题。很棒!~

你可能感兴趣的:(TableView 刷新后调用 reloadData 出现上移)