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

ios - 可复用的 TableViewCell 异步高度

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

我有自定义 UITableViewCell:

enter image description here

还有一些带有 imageURL 属性的对象(从服务器获取)。

任务:需要异步下载图像(通过 Kingfisher)。如果图像不存在 - 隐藏 ImageView。 有些工作正常,但是:

  • 当图片开始下载时(在后台),用户也可以滚动tableView,如果图片没有下载(image == nil),imageView隐藏(需要隐藏/显示),scrollView中的contentSize改变。 - 问题第一(滚动跳转)

  • SECOND:当用户滚动填充的tableView时,一些单元格没有图像,当这个单元格被重用时,Kingfisher也尝试为重用的单元格下载图像。如果图像存在 - imageView 显示,并且单元格像展开一样。 ScrollView 的 contentSize 再次发生了变化,结果我们出现了故障跳跃。

附:尝试使用表更新,重新加载行,也使用不同的单元格作为空单元格 - 不成功。还尝试在 SO 中找到解决方案,但仅资助理论

有想法(不仅仅是理论)?

谢谢

附言基于图像的硬编码单元格大小(有或没有)。并更改约束 imageView(0 或 xxx)。如果理解正确 - tableView 不知道单元格大小(因为设置了 UITableViewAutomaticDimension)

不是很好的解决方案,但有效。

enter image description here



Best Answer-推荐答案


对于您的第一个问题,有两种方法可以解决它。您可以拥有一个超快速的服务器,或者在您的 arrayOfObjects 中预加载图像高度。也就是说,当您获取对象列表时,您还会检查是否有图像。因此,当您加载单元格时,您无需等待下载然后显示/隐藏图像。这样做不仅可以使滚动更好,还可以减少对图像服务器的调用。

对于第二个问题,在数组中的对象中有一个标志,指示该对象是否具有图像。如果它没有图像,请停止从服务器再次下载。示例代码如下所示:

//itemObject now has property called loadFlag which set to true by default

if itemObject.loadFlag {
  //Your loading image code . If image is nil, set this flag to false
} else { //This will prevent reused cell having image by default
  cell.pictureView.isHidden = true
  cell.picture = nil
}

关于ios - 可复用的 TableViewCell 异步高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44677207/

回复

使用道具 举报

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

本版积分规则

关注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