iOS tableView reloadData 抖动问题

在使用自动布局之后,屏幕刷新调用reloadData会间歇性的抖动,体验及其差。

产生原因:

在使用自动布局之后,UITableViewAutomaticDimension
 高度自动适应,就是每次计算高度的时候产生闪动,我怀疑过scroll动画,频繁调用,但是最终原因是这个自动布局计算cell高度。

解决方法:

 对自动计算的高度进行缓存,仔细观察,第一次出现的时候不抖动的。

代码逻辑:

// declare cellHeightsDictionary
NSMutableDictionary *cellHeightsDictionary;

// initialize in code (thanks to @Gerharbo)
cellHeightsDictionary = @{}.mutableCopy;

// declare table dynamic row height and create correct constraints in cells
tableView.rowHeight = UITableViewAutomaticDimension;

// save height
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    [cellHeightsDictionary setObject:@(cell.frame.size.height) forKey:indexPath];
}

// give exact height value
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSNumber *height = [cellHeightsDictionary objectForKey:indexPath];
    if (height) return height.doubleValue;
    return UITableViewAutomaticDimension;
}
完美解决~

出处:问题出处



你可能感兴趣的:(IOS)