完美解决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)
}
相关推荐
太子釢4 小时前
用 AI 完整实现 Github 客户端:基于 KMP + SwiftUI + Compose
android·人工智能·ios
软泡芙5 小时前
【iOS】 Alamofire + Moya + SwiftData 完整教程
ios
我是谁的程序员6 小时前
Windows / Linux / Mac 上不用 Xcode 把 IPA 上传到 App Store,upload 命令详解
后端·ios
iFlyCai6 小时前
iOS中的单例模式详解
ios·单例模式·objective-c·多线程·swift
ilawsonlu10 小时前
如何正确处理 CoreBluetooth 超时与 Task Cancellation
ios
00后程序员张10 小时前
SSL Pinning 抓包抓不到明文?绕过证书固定的几种方案
网络协议·计算机网络·网络安全·ios·adb·https·udp
weixin_5316708911 小时前
Interlude起来:Swift原生Mac软件有什么优势?原生Mac应用和Electron应用有什么区别?
人工智能·macos·mac·swift
k4m7v2pz11 小时前
Swift Package Manager 在 macOS 26 上的三个编译错误排查指南
macos·spm·ai编程·xcode·swift·命令行工具
ii_best12 小时前
手机自动化脚本按键精灵实战:随机布局安全数字键盘的自动化输入方案
android·运维·ios·自动化·手机
软泡芙1 天前
【IOS】Codable
ios·ssh·cocoa