【问题标题】:Dynamic image heights in UITableViewCell with AutoLayout具有自动布局的 UITableViewCell 中的动态图像高度
【发布时间】:2017-04-07 22:53:42
【问题描述】:

我有一个 UITableViewCell,其中包含多个数据,这些数据被组织成垂直堆栈布局。其中一些是垂直动态的,一个是 UILabel,一个是 UIImageView。

UIImageView 是我遇到的问题。我在 UITableViewCell 中设置了一个带有插座的高度约束。图片是异步加载的,所以 UITableViewCell 行的高度是错误的,我们只有在图片加载后才知道行的真实高度。当我在加载图像后将约束设置为更新为适当的纵横比时,我的 UITableView 变得完全不可靠,图像到处乱跳,格式也不能很好地工作。

我在 StackOverflow 中看到另一篇文章提到您应该预先检查图像,获取它们的宽度和高度,以便我们可以在加载图像之前确定并设置约束。这确实允许平滑滚动。

我的问题是:这是唯一的方法吗?是否有更好的技术来使用具有动态图像大小的 AutoLayout?他们会是什么?

我尝试过调用 setNeedsLayout、setNeedsUpdateConstraints、updateConstraintsIfNeeded 等...它们似乎都不起作用。

有什么建议吗?

詹姆斯

【问题讨论】:

    标签: ios uitableview uiimageview ios-autolayout


    【解决方案1】:

    如果您需要根据图像大小预测单元格高度,那么是的,如果您想设置具有动态动画和可接受滚动性能的平滑布局,则应该预先检查图像。

    例如,Pinterest 在 API 响应中返回请求 Pin 的图像大小,因为他们希望您在异步获取图像之前设置布局,实际上,他们在自己的 iOS 应用程序中做同样的事情(您可以探索他们的 API @987654321 @)。带有图像扩展信息的 Pinterest API 响应示例:

    root:{} 1 item
     data:{} 5 items
     note:A hardened leather thimble to make stitching leather easier!
     url:https://www.pinterest.com/pin/310959549256036760/
     image:{} 1 item
      original:{} 3 items
       url:https://s-media-cache-ak0.pinimg.com/originals/b2/19/ec/b219ec9b8418233c651de9d17bd00e4a.jpg
       width:640
       height:640
    

    第二个选项,使用“伪动态高度”。主要思想,您的单元格高度始终是可预测和预先计算的,但单元格内的图像具有动态大小。我最近在这里缝制的这种解决方案的最佳解释 - Self-sizing Table View Cells

    【讨论】:

    • 感谢您的意见!我一直在事先在 iOS 和 Android 中检索图像的大小。在平滑滚动方面似乎运行良好。
    猜你喜欢
    • 2021-10-12
    • 2014-01-03
    • 1970-01-01
    • 2014-10-19
    • 2014-07-03
    • 1970-01-01
    • 2015-09-17
    • 2013-05-25
    • 2021-05-10
    相关资源
    最近更新 更多