完美解决UITableView和UICollectionView滚动失效

需求

在新数据源到达后,刷新列表,并直接显示指定位置的item

分析

刷新数据肯定是用 reloadData(),直接显示指定位置,很明显需要用到滚动操作,并且不带滚动动画,直接滚动到指定的位置。

  • 下面以 collectionView 为例,滚动不生效
php 复制代码
collectionView.reloadData()
self.collectionView.scrollToItem(at: IndexPath(item: self.currentIndex, section: 0), at: .right, animated: false)

滚动失效原因

如果直接这样执行,会造成滚动失效,原因 reloadData() 操作可能比较耗时,可能会导致滚动操作在数据刷新完成之前就开始执行,从而导致滚动失效。

解决方案

下面的方法可以完美解决这个问题,就是把滚动操作放入主队列中,当主线程的任务执行完成后,主线程空闲时执行滚动操作。

  • 下面以 collectionView 为例:
php 复制代码
collectionView.reloadData()
DispatchQueue.main.async {
    self.collectionView.scrollToItem(at: IndexPath(item: self.currentIndex, section: 0), at: .right, animated: false)
}
相关推荐
2601_9557674221 小时前
圆偏振光AR膜实测:反射率≤0.5%+96%透光率,iPhone17 Pro贴膜久看不累——观复盾上手
人工智能·科技·ios·ar·iphone·圆偏振光
2501_915106321 天前
iOS开发工具有哪些?iOS 开发每个阶段的实用工具
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
Digitally1 天前
如何将数据从 iPhone 传输到传音 Infinix 手机
ios·智能手机·iphone
库奇噜啦呼1 天前
【iOS】源码学习-KVC与KVO
学习·ios·cocoa
黑化旺仔1 天前
iOS - 3G share仿写总结
ios
Digitally1 天前
适用于安卓、iOS 和电脑的最新文件共享应用评测指南
android·ios·电脑
Bowen_J1 天前
Flutter 屏幕旋转适配
android·flutter·ios
2501_916007472 天前
前端开发常用软件与工具全面指南
android·ios·小程序·https·uni-app·iphone·webview
sweet丶2 天前
iOS AI 编程环境配置:Agent、Skill、Rules、Hook、Command
ios·ai编程