完美解决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)
}
相关推荐
开心就好20251 小时前
本地执行 IPA 混淆 无需上传致云端且不修改工程的方案
后端·ios
报错小能手4 小时前
ios开发方向——对于实习开发的app(Robopocket)讲解
开发语言·学习·ios·swift
wechatbot8885 小时前
【企业通信】基于IPAD协议的企业微信群聊管理API:群操作功能接口设计与实现
java·ios·微信·企业微信·ipad
胖虎17 小时前
我用一个 UITableView,干掉了 80% 复杂页面
ios·架构·cocoa·uitableview·ui布局
T1an-17 小时前
最右IOS开发A卷笔试题3.31
c++·ios
wzl202612138 小时前
《从协议层对抗折叠:iPad协议脚本在企微批量群发中的集成与优化》
ios·企业微信·ipad
茶底世界之下9 小时前
Harbeth:高性能Metal图像处理库,让你的图片处理速度飞起来!
前端·github·swift
season_zhu9 小时前
聊聊我最近都干了些什么,AI 时代的手动撸码人
flutter·ios·ai编程
FreeBuf_9 小时前
俄罗斯关联APT组织TA446利用DarkSword漏洞工具包针对iPhone用户发起钓鱼攻击
ios·iphone
Digitally9 小时前
三种将文件从iPhone传输到 Windows 11的方法
ios·iphone