完美解决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)
}
相关推荐
阿祖zu15 小时前
芝士就是力量!开源私有化部署与 GitHub 双向同步的个人知识笔记 App
前端·后端·ios
GitLqr1 天前
iOS 27 强制要求 UISceneDelegate:UIKit 和 Flutter 开发者该如何应对?
flutter·ios·全栈
屑曦晨1 天前
PKToolPicker工具栏图标错误模糊问题排查报告
ios
2501_915921431 天前
详细解析,iOS 应用上架 App Store 的完整流程与指南
android·ios·小程序·https·uni-app·iphone·webview
2501_915106321 天前
SwiftUI项目创建详解:使用Xcode从零开始创建第一个App项目
ide·vscode·ios·swiftui·个人开发·xcode·敏捷流程
2501_915918411 天前
Xcode调试iOS应用内存管理与优化,识别泄漏与性能监控指南
android·ios·小程序·uni-app·cocoa·iphone·xcode
9765033351 天前
iOS 上架/审核 4.3a Cocos 2026最新方案解读
flutter·ios·swift·cocos2d·ios开发
2501_916007471 天前
IDE 是什么?集成开发环境详解与 iOS 开发选型指南
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
梦想的颜色1 天前
UniApp 四端对齐实战:iOS App / Android App / 小程序 / H5 兼容坑点与完整解决方案|AI 辅助多端落地
android·ios·小程序·uni‑app·uniapp 四端适配·多端兼容·ai 生成 uni‑app
CocoaKier2 天前
喜大普奔!2027年春季起,iOS提审最低支持iOS15.0以上
ios·apple