tableView 刷新 抖动解决办法
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;
}
这个方法是给tableview默认加一个预估的cell值,在iOS11以下可以使用这个方法。里面返回UITableViewAutomaticDimension,如果在iOS11上出了reload闪屏,在创建tableview的时候使用
if(@avalible(IOS,*)){
tableview.estimatedRowHeight = 0
}
or
_tableView.estimatedSectionHeaderHeight = 0;
_tableView.estimatedSectionFooterHeight = 0;
_tableView.estimatedRowHeight = 0;
就行了产生的原因是在创建tablecell的时候系统给加了一个默认预估的cell高度,每次reload都用这个高度计算cell,禁用或者设为0就行了
知识拓展:
- estimatedHeightForRowAtIndexPath:
-
在没有实现estimatedHeightForRowAtIndexPath方法时,这三个方法(numberOfRowsInSection,heightForRowAtIndexPath,cellForRowAtIndexPath)的调用顺序如下:
1.先调用numberOfRowsInSection 2.再调用heightForRowAtIndexPath 3.再调用cellForRowAtIndexPath
-
实现了estimatedHeightForRowAtIndexPath方法后,调用顺序是这样的
1.numberOfRowsInSection 2.estimatedHeightForRowAtIndexPath 3.cellForRowAtIndexPath 4.heightForRowAtIndexPath
-
接下来我来说明以下出现EXC_BAD_ACCESS错误的原因:
当你没用实现estimatedHeightForRowAtIndexPath方法时, heightForRowAtIndexPath方法获取cell的时候, 会形成一个死循环,那就是numberOfRowsInSection和heightForRowAtIndexPath方法不断互调, 最后程序崩溃.
网友评论