• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - collectionView.indexPathsForVisibleItems 没有列出我知道可见的项目

[复制链接]
菜鸟教程小白 发表于 2022-12-11 18:30:43 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个 UICollectionView 显示单元格,其中部分包含我需要从服务器获取的图像。在 cellForItemAt 中,我检查缓存以查看图像是否可用,如果不可用,则调用方法下载图像。

在该方法中,我异步加载图像。下载图像后,我检查与该图像关联的 indexPath 是否可见。如果是这样,我会调用 reloadItems 来更新显示。

问题是我可以在模拟器上看到空单元格,但它不是在可见单元格数组中。

这是一个显示问题的最小片段。

   func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell: ThumbCell = collectionView.dequeueReusableCell(withReuseIdentifier: kReuseId, for: indexPath) as! PosterThumbCell


    print("cellforItemAt: \(indexPath)")
    print("visibleItems: \(collectionView.indexPathsForVisibleItems)")

    ...
    return cell
}

现在我希望 indexPath 位于可见项数组中。但事实并非如此。在项目被视为可见之前是否必须发生某些事件?我错过了什么?



Best Answer-推荐答案


collectionView(_collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 被collectionView 调用以获取它将显示的单元格。因此,如果您在从此函数返回之前打印可见单元格,则新出列的单元格将不在数组中。

要对此进行测试,请添加一个测试按钮并将您的打印从该数据源函数移动到按钮的处理程序。显示单元格后点击按钮,它将在数组中。

我不知道你的下载方法是什么样的,但你的骨架应该是这样的:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell: ThumbCell = collectionView.dequeueReusableCell(withReuseIdentifier: kReuseId, for: indexPath) as! PosterThumbCell


    if let image = self.getImage(for: indexPath) {
        cell.image = image
    } else {
        weak var weakCell = cell
        self.loadImageFromServer(for: indexPath) { (image) in
            // Should check that the cell is still used for the same IndexPath
            weakCell?.image = image
        }    
    }
    return cell
}

如果已下载,则分配图像,否则下载并在完成时分配。请注意,您在开始请求时使用的单元格可以在下载结束时重新用于其他 indexPath。有关更多详细信息,您应该查看此 answer .

关于ios - collectionView.indexPathsForVisibleItems 没有列出我知道可见的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41508501/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap