UITableViewCell 中的 AlamofireImage af_setImageWithURL 没有占位符图像

2024-01-04

我使用 AlamofireImage 在 UITableViewCell 中的 UIImageView 上设置图像,如下所示:

cell.imageView.af_setImageWithURL(url)

下载后图像不显示。当从内存缓存加载图像时,它将第二次显示该图像。

看来使用占位符图像会带来很大的不同。

这可以工作并打印(下载的)图像的地址:

cell.imageView.af_setImageWithURL(URL, placeholderImage: UIImage(named: "placeholder"), filter: nil, imageTransition: .None, completion: { (response) -> Void in
                    print("image: \(cell.imageView.image)")
                })

这不起作用并打印“image:nil”

cell.imageView.af_setImageWithURL(URL, placeholderImage: nil, filter: nil, imageTransition: .None, completion: { (response) -> Void in
                    print("image: \(self.image)")
                })

在执行之前将单元格 imageView 设置为空图像时它也适用af_setImageWithURL:

cell.imageView.image = UIImage()

这是 UITableViewCell、AlamofireImage 中的错误还是我做错了什么?


这个问题已经有几年了,但也许这个答案对于其他有类似问题的人有用,比如我之前找到正确的解决方案。

由于图像是异步加载的,如果我们没有为 UIIMageView 提供固定的高度下载完成后我们必须强制更新单元格。这是因为单元格更新(即自动布局约束重新计算)仅在cellForRowAt方法,当第一次显示单元格或滚动表格以显示其他单元格时调用该方法。在这两种情况下,图像可能尚未被下载af_setImage()方法,因此除了占位符之外什么都不会显示,因为它们的大小暂时未知。

要强制更新单元格,我们需要使用beginUpdates() and endUpdates()方法,将它们放入完成处理程序中.af_setImage()。这样,每次下载完成后,cell都会更新。

但是,为了避免循环, 在调用之前beginUpdates()/endUpdates()我们必须检查之前是否已经更新过单元格,因为通过调用这些方法,cellForRowAt方法被再次调用,因此af_setImage()及其完成关闭beginUpdates()/endUpdates()在里面)。

这意味着我们只需要在下载刚刚完成时更新单元格,而不是在图像已经兑现时更新单元格(因为,如果兑现,就意味着我们已经更新了单元格)。这可以通过检查完成处理程序的响应来完成:如果不是nil,图像刚刚被downolad,如果是nil,图像已兑现。

作为一个附带好处,单元格高度将自动调整(记住将tableView.estimatedRowHeight = 400 and tableView.rowHeight = UITableViewAutomaticDimension在你的viewDidLoad() method)

最后,这是代码:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // Dequeue your cell
        let cell = self.tableView.dequeueReusableCell(withIdentifier: "YourCustomCellIdentifier") as! YourCustomTableViewCell

        // get picture url from the data array
        let pictureUrl = self.yourCellsData[indexPath.row].pictureUrl

        // async download
        cell.pictureView.af_setImage(
                withURL:  URL(string: pictureUrl)!,
                placeholderImage: UIImage(named: "YourPlaceholder.png"),
                filter: nil,
                imageTransition: UIImageView.ImageTransition.crossDissolve(0.5),
                runImageTransitionIfCached: false) {
                    // Completion closure
                    response in
                        // Check if the image isn't already cached
                        if response.response != nil {
                            // Force the cell update
                            self.tableView.beginUpdates()
                            self.tableView.endUpdates()
                        }
                }

        return cell
        }

这就是大家! ;-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UITableViewCell 中的 AlamofireImage af_setImageWithURL 没有占位符图像 的相关文章

  • 应用未能及时恢复

    我在一个非常具体的场景中遇到 未能及时恢复 崩溃 我认为与看门狗相关 仅在从后台恢复时 并且仅在进入后台后在很短的时间内执行此操作 a最多几秒钟 这似乎是相关的崩溃日志 Incident Identifier E30F2238 5B15 4
  • 以编程方式更改 iPhone 背景

    是否可以通过代码更改 iPhone 背景 如果你写一个新的png到 User Library LockBackground png然后打电话notify post com apple language changed 设备将重新启动 并且您
  • 蓝牙 4.0 与较旧的蓝牙

    我正在尝试使用蓝牙 4 0 模块实现一个应用程序 我想知道将此应用程序与包含简单蓝牙 2 1 EDR 模块的 Iphone 3GS 一起使用是否能让我利用 4 0 模块中的低功耗 谢谢您的回答 蓝牙 4 0 是标准 其中包括经典蓝牙基本速率
  • 具有非零“内容”的 QTMovieLayer 的 iOS 替代品?

    背景 QTKit QuickTime Kit 是一个来自 10 3 天的 Mac 框架 在 10 5 中添加了一些层 例如QTMovieLayer QTMovieLayer 的好处之一是您可以使用常规访问电影内容content图层上的属性并
  • 我无法捕获 WKWebView 的屏幕截图

    我正在尝试捕获 WKWebView 的屏幕截图 但我的方法无法正常工作 它返回纯色 就好像图层树为空一样 而它似乎适用于其他视图 UIImage screenshot UIImage screenshot UIGraphicsBeginIm
  • 错误 ITMS-9000 iTunes Connect

    我正在尝试上传一个phonegap build iOS应用程序到应用程序商店 我不断收到此错误 ERROR ITMS 9000 Missing Code Signing Entitlements No entitlements found
  • 如何比 CGContextStrokePath 更快地渲染线条?

    我正在使用 CGContextStrokePath 绘制约 768 个点的图表 问题是 每一秒我都会得到一个新的数据点 从而重新绘制图表 目前 这个已经很繁忙的应用程序占用了 50 的 CPU 图形绘制是在UIView 中的drawRect
  • 检测 UITableView 中的水平平移

    我正在使用 UIPanGestureRecognizer 来识别 UITableView 中的水平滑动 准确地说是在单元格上 尽管它已添加到表格本身 然而 这个手势识别器显然窃取了桌子上的触摸 我已经让 pangesturerecogniz
  • CocoaPods 生成无效的项目文件(未找到标头)

    我有一个带有 Podfile 的项目文件 如下所示 platform ios 7 0 def import pods pod Specta 0 1 8 pod Expecta 0 2 1 pod RestKit 0 20 3 pod Mag
  • 从 AF.Request 响应获取数据

    我需要使用 Alamofire 的 Post 请求调用的 json 响应中的数据 但由于某种原因我无法访问该数据 我尝试按照 Alamofire github 文档以及这篇文章进行操作从 AF 响应 JSON 获取数据 https stac
  • 自定义 UISearchDisplayController

    替代文本 http img210 imageshack us img210 5992 searchdisplaycontroller png http img210 imageshack us img210 5992 searchdispl
  • 是否有一个类可以获取应用程序中的默认图片查看器?

    我不想访问 iPhone 上的图像 我想显示我的应用程序中的图像 但就像您查看 iPhone 相册中的图片一样 使用所有捏合和缩放控件等 这可能吗 我认为可能 偶然 有像 AVMediaPlayer 类这样的类可以做到这一点 谢谢 汤姆 如
  • NSPredicate 使用 RLMResults 作为参数

    我试图通过使用 NSPredicate 进行过滤来获取两组 Realm 数据 并且是不同的对象 之间的差异 但存在一个我无法理解的错误 我的代码 RLMResults topStories KFXTopStory allObjects NS
  • 以编程方式添加带有自动布局的 UISLider

    我正在尝试以编程方式将 UISlider 添加到我的视图中 包括约束 以便其宽度适应整个屏幕宽度 这是我到目前为止得到的 2 Add UISlider self slider UISlider alloc init self view ad
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • 如何检测iPhone是否有视网膜显示屏?

    如何检测 iPhone 是否配备视网膜显示屏 有靠谱的办法吗 要么是纯 PHP 要么最好是 Zend Framework 方式来执行此操作 我通过这个弄清楚了 var retina window devicePixelRatio gt 1
  • iOS 4.0 中的应用程序将终止

    iOS 4 0 中未调用 applicationWillTerminate 委托方法 当我点击 主页 按钮时 我看到 applicationWillResignActive 和 applicationDidEnterBackground 委
  • 在 iPhone 模拟器中从硬盘读取文件

    是否可以将文件 从我的普通文件系统 读入在 iPhone 模拟器上运行的 iPhone 应用程序 据我所知 iPhone 本身没有 用户可访问的 文件系统 但这只是为了测试 并且只能在模拟器中运行 该文件将是一个可以在应用程序运行时编辑的文
  • UITableViewController 无法识别的选择器发送到实例

    当我传递一个整数时 我有一个 tableviewcontroller 和一个detailtableviewcontroller UITableViewController setSurveyNumber 无法识别的选择器发送到实例 Biza
  • iOS SWIFT - WebRTC 从前置摄像头更改为后置摄像头

    WebRTC 视频默认使用前置摄像头 效果很好 但是 我需要将其切换到后置摄像头 但我无法找到任何代码来执行此操作 我需要编辑哪一部分 是 localView 或 localVideoTrack 还是捕获器 斯威夫特3 0 对等连接只能有一

随机推荐

  • WebForms 中的 Tab 键切换行为

    在 WinForms 中 我可以设计一个表单并使用 TabValue 来控制每次用户点击 Tab 时选择哪个控件 我的问题是 在网络表单中 是否有一种机制可以做同样的事情 编辑 这同样适用于 Ajax 密集型应用程序吗 您可以使用 ASP
  • Xml 架构扩展顺序

    如果我有扩展 如何确保派生元素位于基类元素前面 默认情况是相反的 我很想用all 但我知道这是不可能的
  • java中Arrays.fill的复杂性

    How Arrays fill char a char val 已实施内部 in java 它的复杂性是什么 Java 实现使用一个简单的for环形 然而 重要的是要记住 JVM 经常对内部功能进行重大更改 并且经常在运行时用较低级别的实现
  • crawler4j 获取数据遵循什么步骤顺序?

    我想学习 crawler4j是如何工作的 它是否获取网页然后下载其内容并提取它 db 和 csv 文件及其结构怎么样 一般来说 它遵循什么顺序 拜托 我想要描述性内容 Thanks 爬虫通用流程 一个典型的多线程爬虫的流程如下 我们有一个队
  • MPMoviePlayerController 覆盖 iOS 6

    在 iOS6 中使用 MPMoviePLayerController 时遇到覆盖问题 在 iOS6 之前一切正常 在我有这个代码之前 我似乎可以全屏播放电影 interface MovieOverlayViewController UIVi
  • 如何在动态添加的 DropDownList 列表项上添加 OnClick 事件?

    假设我有以下代码 DropDownList changesList new DropDownList ListItem item item new ListItem item Text go to google com changesLis
  • javax.mail.internet.ParseException:在 Content-Type string 中,预期为“/”,得到:

    我想使用 JSF 实现带有附件的邮件 我尝试了这段代码 private Part file private String sendFromGMail String from String pass String to String subj
  • android:layout_weight 是如何工作的?

    当我有以下内容时 它显示具有四种颜色的顶部布局的面积比底部布局区域小得多 根据本文档 http developer android com guide topics ui layout objects html linearlayout 当
  • ElasticSearch:在groovy脚本中访问文档嵌套值

    我有一个存储在 ElasticSearch 中的文档 如下所示 来源 firstname John lastname Smith medals bucket 100 count 1 bucket 150 count 2 我可以使用访问文档内
  • 使用输入框替换文本区域中的部分字符串(属性)

    主要目标 创建一个可以实时预览 HTML CSS 代码的网站 进一步来说 用户可以在某些特定部分编辑 HTML CSS 代码 因此 实时预览中的代码不会源自文本区域 而是源自 div Image of what I am trying to
  • Android 上使用微信 API 发朋友圈

    我用微信API创建了一个应用程序 我尝试在我的用户墙上发帖 我在iOS上可以成功发布微信朋友圈 提示尚未审核 然而在 Android 上 什么也没发生 这是我的代码 private IWXAPI api api WXAPIFactory c
  • htaccess 403 尝试使用 ErrorDocument 时遇到禁止错误

    我想在我的项目中有一个自定义 403 页面 所以我在 htaccess 文件中添加了这些代码 Order deny allow Deny from all Allow from 192 168 1 0 24 ErrorDocument 40
  • 如何在限制x轴后自动设置y轴限制

    假设我有一定数量的数据集想要一起绘制 然后我想放大某个部分 例如 使用ax set xlim or plt xlim or plt axis 当我这样做时 它仍然保留缩放之前的计算范围 我怎样才能让它重新缩放到当前显示的内容 例如 使用 i
  • 如何构建柔性结构?

    我想用像这样的 CSS构建一个灵活的结构 顶部和底部divs具有固定高度 而中心框具有响应高度 它们都应该覆盖整个容器 div 谁能告诉我该怎么做 body position relative padding 0px margin 0px
  • 如何在 GWT 中获取一年中的周数

    有没有一种简单的方法可以从a获取一年中的一周信息Date对象或从毫秒时间开始GWT在客户端 像这样的事情 Date date new Date Date yearStart new Date date getYear 0 0 int wee
  • 如何保存 nltk FreqDist 图?

    我尝试了不同的方法来保存我的情节 但我尝试过的每件事都出现了空白图像 而且我目前还没有没有想法 有其他可以解决此问题的建议吗 代码示例如下 word frequency nltk FreqDist merged lemmatizedToke
  • 如何使用 SuiteScript 采购订单加载项目?

    朋友们正在使用 NetSuite 和 SuiteScript 我可以保存运行脚本的采购订单并对创建的采购订单进行收费 但是当我将返回数据项值作为空值时 我需要获取该项目的 ID 结果给我的 NetSuite 日志是 采购订单 ID 3706
  • VBScript - 按文件名中的字符串查找文件夹中的文件,将找到的文件移动到不同的文件夹

    我仍在学习 VBS 不确定我是否以正确或最有效的方式进行此操作 测试场景如下 除了常规桌面项目之外 我还添加了三个名为 Tool YouTube welcome to facebook BBC news 当我的代码 底部 运行时 它会按预期
  • 将文本文件中的数据提取到 Excel 中

    我是 VBA 新手 所以完成我的任务是相当困难的 几天来一直在阅读和尝试来自不同线程的代码 但没有成功 所以我希望有人可以帮助我 我有多个文本文件 需要从中提取数据 但我只需要将某些数据 例如日期时间 放在第一列中 将卡号放在第二列中 从该
  • UITableViewCell 中的 AlamofireImage af_setImageWithURL 没有占位符图像

    我使用 AlamofireImage 在 UITableViewCell 中的 UIImageView 上设置图像 如下所示 cell imageView af setImageWithURL url 下载后图像不显示 当从内存缓存加载图像