完美解决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)
}
相关推荐
晓风伴月7 小时前
微信小程序:在ios中border边框显示不全
ios·微信小程序·小程序
2501_9160137410 小时前
iOS 加固工具使用经验与 App 安全交付流程的实战分享
android·ios·小程序·https·uni-app·iphone·webview
大熊猫侯佩11 小时前
探秘 WWDC 25 全新 #Playground 宏:提升 Swift 开发效率的超级神器
xcode·swift·wwdc
2501_9151063214 小时前
Fiddler 中文版抓包实战 构建标准化调试流程提升团队协作效率
android·ios·小程序·https·uni-app·iphone·webview
iReaShare15 小时前
iPhone 数据擦除软件评测(最新且全面)
ios
iReaShare16 小时前
轻松将文件从 iPhone 传输到 Mac
ios
91440623216 小时前
IOS 18下openURL 失效问题
ios
移动端小伙伴19 小时前
10.推送的扩展能力 — 打造安全的通知体验
swift
移动端小伙伴19 小时前
推送的扩展能力 — 打造个性化的通知体验
swift
移动端小伙伴19 小时前
远程推送(Remote Push Notification)
swift