完美解决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)
}
相关推荐
2501_9159214317 小时前
iOS App 中 SSL Pinning 场景下代理抓包失效的原因
android·网络协议·ios·小程序·uni-app·iphone·ssl
Swift社区18 小时前
Flutter / RN / iOS 的 UI 渲染机制,本质差异在哪里?
flutter·ui·ios
程序漫游人20 小时前
苹果IOS App Store加快审核进度
android·ios·软件工程·iphone
吴Wu涛涛涛涛涛Tao21 小时前
抖音思路复刻:iOS 卡死(ANR)监控 + 自动符号化全流程实战
ios·性能优化
JQShan21 小时前
Core Data 简化开发:NSPersistentContainer 从原理到实战
swift
2501_9160088921 小时前
在 Windows 上使用开心上架(Appuploader)在 Windows 环境下创建与管理 iOS 证书
android·ios·小程序·https·uni-app·iphone·webview
好大哥呀1 天前
iOS - UIViewController 生命周期
macos·ios·cocoa
好大哥呀1 天前
如何在iOS中使用UIViewController的生命周期方法?
macos·ios·xcode
东坡肘子1 天前
2026:当 AI 隐入工作流,你准备好了吗? -- 肘子的 Swift 周报 #117
人工智能·swiftui·swift