关于iOS中刷新单行cell抖动的问题

由于项目中需要使用自动布局,因此本人采用masonry布局。但在布局之后,屏幕刷新调用reloadData会间歇性的抖动,体验及其差。

产生原因:

在使用自动布局之后,UITableViewAutomaticDimension 高度自动适应,就是每次计算高度的时候产生闪动,原因是这个自动布局计算cell高度的时候出现问题。

解决方法:

于是查看其他大佬的文章发现几乎全部采用预设高度为0来进行解决,解决方案如下:

        tableView.estimatedRowHeight = 1;

        tableView.estimatedSectionHeaderHeight = 0;

        tableView.estimatedSectionFooterHeight = 0;

经过调试发现,采用固定高度布局时,此方法有效可行。但在自动布局的情况下,该解决方案会导致cell无法展开,实现高度自适应。

后来在@草尘大佬的一篇文章中看到了完美的解决方案,在这里分享给大家:

// 声明单元格高度字典

NSMutableDictionary *cellHeightsDictionary;

// 代码初始化

cellHeightsDictionary = @{}.mutableCopy;

// 声明表的动态行高度,并在单元格中创建正确的约束

tableView.rowHeight = UITableViewAutomaticDimension;

// 保存行高

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

[cellHeightsDictionary setObject:@(cell.frame.size.height) forKey:indexPath];

}

//给出准确的高度值

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {

NSNumber *height = [cellHeightsDictionary objectForKey:indexPath];

if (height) return height.doubleValue;

return UITableViewAutomaticDimension;

}

这样便可以完美的解决了。希望对您有帮助!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、简介 <<UITableView(或简单地说,表视图)的一个实例是用于显示和编辑分层列出的信息的一种手段 <<...
    无邪8阅读 13,673评论 3 3
  • 概述在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似...
    liudhkk阅读 12,963评论 3 38
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,816评论 1 32
  • 我们在上一篇《通过代码自定义不等高cell》中学习了tableView的相关知识,本文将在上文的基础上,利用sto...
    啊世ka阅读 5,420评论 2 7
  • iOS流布局UICollectionView系列一——初识与简单使用UICollectionView 一、简介 U...
    我是啊梁阅读 13,568评论 3 10