在使用自动布局之后,屏幕刷新调用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;
}
完美解决~
出处:问题出处