1.抖动问题:使用系统方法自动布局会造成来回切换页面数据刷新时,上下滑动会一直抖动,设置header和footer的预估高度只适用于一种header或footer的高度,如果有多种header或者footer高度不断变化,就会抖动,亲测有效。其实说到底我们的需求大部分只需要设置cell的自动布局就OK了,cell的控件比较多的情况,手动计算很繁琐,只不过是header和footer的预估高度默认就是自动布局了,我们页不会去想到是这个原因,还以为是cell的自动布局导致的抖动,那这样就直接设置header和footer的预估高度等于0禁用掉,然后在代理方法里面设置高度即可,cell的高度计算还是可以使用UITableViewAutomaticDimension计算的。
- 原来的代码:
_tableView.estimatedRowHeight = 120.f;
_tableView.estimatedSectionHeaderHeight = 50.f;
_tableView.estimatedSectionFooterHeight = 60.f;
_tableView.rowHeight = UITableViewAutomaticDimension;
,
- 修改后
_tableView.estimatedRowHeight = 120.f;
_tableView.estimatedSectionHeaderHeight = 0;
_tableView.estimatedSectionFooterHeight = 0;//禁用掉或者准确的设置高度,否则都会造成抖动
_tableView.rowHeight = UITableViewAutomaticDimension;
其他的方法:好像不太适用我的页面,因为我这个tableview有2段接口数据分开加载显示的
// 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;
}
网友评论