获取图像后从其 imageView 刷新 UITableViewCell 布局

Posted

技术标签:

【中文标题】获取图像后从其 imageView 刷新 UITableViewCell 布局【英文标题】:Refreshing UITableViewCell layout from its imageView after fetching image 【发布时间】:2016-06-20 15:57:23 【问题描述】:

我有 UIImageView 扩展程序,它正在后台从给定 url 下载图像。我用它来获取UITableViewCell 的图像。成功下载后,我调用self.setNeedsLayout(),但它不会刷新单元格的布局,因为此方法仅更新调用者子视图的布局。我试图使用self.superview.setNeedsLayout() 甚至self.window.setNeedsLayout()。它不起作用,它说这两种观点都是零。你有什么想法我可以从它的childView中刷新UITableViewCell布局吗?我们正在谈论通用UITableViewCell,我想避免创建新类只是为了在这种情况下进行布局,我想在我只有UIImageView 而不是在表格视图中的其他地方使用这个扩展。可以通过简单的扩展来实现吗?现在我有自定义 UITableViewCell 正在下载,设置图像,然后它正在调用 self.setNeedsLayout() 并且它可以工作。

【问题讨论】:

【参考方案1】:

请考虑使用 SDWebImage 等库来异步下载图像。我认为它可以解决您的问题并提高性能。

编辑:

来自SDWebImage 文档:

它提供:

添加网页图像和缓存的 UIImageView 类别 异步图片下载器 具有自动缓存过期处理功能的异步内存 + 磁盘映像缓存 保证不会多次下载同一个 URL 保证不会一次又一次地重试虚假网址 保证主线程永远不会被阻塞 表演! ...

【讨论】:

我会尝试这样做。我只是想自己编码一切:) 我明白,我曾经这样做,但我最终使用了这个库,因为它为您提供了许多很酷的功能,例如图像缓存。只需一行,您就可以异步下载图像,您不必再考虑它了。我已经用它替换了我所有的图片下载,我的应用程序在效率上提高了很多:) 嗨,我已经阅读了这个库。看起来不错,但我仍然想知道如何使我的扩展工作。只是想知道如何从它的子视图强制重新布局单元格。 我不太明白,你想要childview.superview.setNeedsLayout 之类的东西吗? 是的。它不工作。在细胞的情况下。它没有重新布局

以上是关于获取图像后从其 imageView 刷新 UITableViewCell 布局的主要内容,如果未能解决你的问题,请参考以下文章

安卓。从其资源 id 获取图像大小

在方面适合后从 UIImageView 获取图像的宽度和高度

php 从其URL获取图像的WordPress附件ID

php 从其URL获取图像的WordPress附件ID

使用 Glide 刷新 ImageView

从 ImageView 获取裁剪的图像