UIKit 列表性能优化:滑动时暂停图片加载,停止再加载
做 iOS 列表优化最头疼的就是快速滑动时图片疯狂加载、导致卡顿掉帧。今天直接给你一个生产环境能用、简单粗暴、零坑的方案UITableView 滑动时暂停所有图片下载停止滑动后只加载当前可见 cell 的图片。基于 Kingfisher纯手写复制就能跑。一、核心思路一句话讲清监听列表滚动状态开始滑动 暂停图片下载停止滑动 恢复下载 刷新可见 cellcell 复用的时候取消旧图片请求防止错乱全程不影响滑动流畅度不浪费流量二、完整代码直接复制使用1. 控制器代码核心逻辑import UIKit import Kingfisher class SmoothListController: UIViewController { IBOutlet weak var tableView: UITableView! // 你的数据源 var dataList: [YourModel] [] // 标记是否正在滑动 private var isScrolling false override func viewDidLoad() { super.viewDidLoad() setupTableView() } private func setupTableView() { tableView.delegate self tableView.dataSource self tableView.register(ImageCell.self, forCellReuseIdentifier: ImageCell) } } // MARK: - 滚动代理控制图片加载 extension SmoothListController: UIScrollViewDelegate { /// 开始拖动手指按住滑动 func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { isScrolling true // 滑动瞬间暂停所有图片下载 KingfisherManager.shared.downloader.pauseAll() } /// 结束拖动手指松开没有减速 func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { if !decelerate { loadVisibleCellImages() } } /// 滚动完全停止减速结束 func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { loadVisibleCellImages() } /// 恢复加载只刷新当前屏幕可见的 cell private func loadVisibleCellImages() { isScrolling false KingfisherManager.shared.downloader.resumeAll() // 局部刷新不 reload 整个表格 guard let visibleRows tableView.indexPathsForVisibleRows else { return } tableView.reloadRows(at: visibleRows, with: .none) } } // MARK: - 列表数据源 extension SmoothListController: UITableViewDataSource, UITableViewDelegate { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) - Int { dataList.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) - UITableViewCell { let cell tableView.dequeueReusableCell(withIdentifier: ImageCell, for: indexPath) as! ImageCell let model dataList[indexPath.row] cell.titleLabel.text model.title // 关键只有停止滑动才加载图片 if !isScrolling { cell.iconView.kf.setImage(with: URL(string: model.imageUrl)) } else { cell.iconView.image nil // 滑动中清空防止闪烁 } return cell } }2. 自定义 Cell防止图片错乱class ImageCell: UITableViewCell { let iconView UIImageView() let titleLabel UILabel() override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) // 你自己布局这里省略 } required init?(coder: NSCoder) { fatalError(init(coder:) has not been implemented) } // 复用 cell 时必须取消旧请求 override func prepareForReuse() { super.prepareForReuse() iconView.kf.cancelDownloadTask() iconView.image nil } }3. 数据模型自己替换struct YourModel { let title: String let imageUrl: String }三、关键细节写项目必看为什么用 pauseAll /resumeAll滑动时直接暂停所有下载完全不占用主线程滑动绝对丝滑。为什么只刷新可见 cellreloadData会卡reloadRows(at: visibleRows)只刷新屏幕里的性能拉满。cell 复用必须 cancel 任务不复用、不取消图片百分百错乱。滑动时清空 image防止快速滑动时旧图片闪一下再替换体验干净。覆盖所有停止场景手指松开就停、松开后减速两种场景都处理到位。四、效果总结快速滑动列表不加载任何图片丝滑不卡顿停止滑动瞬间加载当前屏幕图片滑出屏幕的 cell不加载省流量、省内存这是我做列表优化必用的一段代码简单、稳定、没坑。你直接把数据模型换成自己的布局改改就能上线。

相关新闻

AI智能体:从理论迈向工程应用的核心技术解析

AI智能体:从理论迈向工程应用的核心技术解析

这些年以来,人工智能技术正在加快速度从理论朝着工程化应用迈进,当中“AI智能体”作为达成通用人工智能的关键路径里的一条,受到了产业界以及学术界的普遍关注,AI智能体不是专门指某一款软件或者硬件,而是一种能够感知…

2026/5/17 7:03:25 阅读更多 →
integer修改缓存大小

integer修改缓存大小

在 Java 中,Integer 类的缓存(也叫享元模式)是为了优化小整数的创建性能,默认缓存范围是 [-128, 127]。你可以通过调整 JVM 参数来修改缓存的上限(下限 -128 固定不可改),下面我会详细说明具体方…

2026/5/17 12:58:10 阅读更多 →
2026 AI内容革命:AI短剧、AI动画、AI Agent正在重构互联网产业

2026 AI内容革命:AI短剧、AI动画、AI Agent正在重构互联网产业

过去两年,AI 行业的发展速度远远超出了大多数人的预期。从最初的 AI聊天工具,到如今覆盖 AI视频、AI绘图、AI音乐、AI编程、AI Agent、AI短剧、AI动画、AI小说 等完整生态,人工智能正在成为新的互联网基础设施。 对于普通用户来说&#xff0…

2026/7/3 13:21:11 阅读更多 →

最新新闻

机器学习与模式识别 第八章 MAP与偏方差 考点压缩

机器学习与模式识别 第八章 MAP与偏方差 考点压缩

第八章:Regression (Cont.) and Bias-Variance Trade-off — 知识点笔记综合来源:Lecture 08 PDF(55页)、课堂笔记(CSDN)占位图8.1 先验信念与MAP ⭐⭐ MLE的问题 MLE仅用数据→小数据/噪声多→可能拟合极端…

2026/7/4 20:13:39 阅读更多 →
GDSDecomp技术实现:PCK文件极速修改与Godot逆向工程架构设计

GDSDecomp技术实现:PCK文件极速修改与Godot逆向工程架构设计

GDSDecomp技术实现:PCK文件极速修改与Godot逆向工程架构设计 【免费下载链接】gdsdecomp Godot reverse engineering tools 项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp GDSDecomp是一款专为Godot引擎设计的逆向工程工具,提供PC…

2026/7/4 20:11:39 阅读更多 →
掌握专业级Windows Defender控制:高效系统安全防护管理实战指南

掌握专业级Windows Defender控制:高效系统安全防护管理实战指南

掌握专业级Windows Defender控制:高效系统安全防护管理实战指南 【免费下载链接】defender-control An open-source windows defender manager. Now you can disable windows defender permanently. 项目地址: https://gitcode.com/gh_mirrors/de/defender-contr…

2026/7/4 20:07:38 阅读更多 →
角谷猜想的弗洛伊德算法的同构映射:数论映射图论 Version6.6

角谷猜想的弗洛伊德算法的同构映射:数论映射图论 Version6.6

角谷猜想的弗洛伊德算法的同构映射:数论映射图论 Version6.6上古天真论 2026-06-30AI得到的矩阵,我测试不合我意,不知对错,暂当成错的。 于是,我象配方法一样,配方阵法,配矩阵法,一…

2026/7/4 20:05:38 阅读更多 →
ComfyUI-WanVideoWrapper深度评测:5090显卡如何10分钟生成超千帧视频

ComfyUI-WanVideoWrapper深度评测:5090显卡如何10分钟生成超千帧视频

ComfyUI-WanVideoWrapper深度评测:5090显卡如何10分钟生成超千帧视频 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 在AI视频生成领域,开源项目性能优化一直是开发者们关…

2026/7/4 20:03:38 阅读更多 →
深度学习图像识别实战:从零构建CNN模型

深度学习图像识别实战:从零构建CNN模型

1. 图像识别实战:从零构建深度学习模型(开头部分自然融入核心关键词"深度学习"和"图像识别",用从业者视角引入) 上周刚结束李哥深度学习班的图像识别专题课,作为班里唯一一个从机械专业转行过来的…

2026/7/4 20:01:37 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻