tableView 刷新 抖动解决办法

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就行了


知识拓展:

  1. 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方法不断互调,
    最后程序崩溃.
    

你可能感兴趣的:(tableView 刷新 抖动解决办法)