AutoLayout:在 UIStackView/UITableViewCell 中缩放 UIImageView 的问题

Posted

技术标签:

【中文标题】AutoLayout:在 UIStackView/UITableViewCell 中缩放 UIImageView 的问题【英文标题】:AutoLayout: Issue with scaling UIImageView in UIStackView/UITableViewCell 【发布时间】:2018-08-26 22:17:51 【问题描述】:

我有一个UITableViewCell,其中包含一个垂直堆叠的视图UIStackView。我已将UITableViewAutomaticDimension 设置为UITableView 的行高和估计高度。 UIStackView 的其中一个子视图包含两个 UIImageViews,如下所示:

小的是avatarImageView,大的是messageImageView。以下是限制条件:

avatarImageView:

messageImageView:

然后,我尝试在cellForRowAt 的委托方法中更新messageImageView 的高度以匹配图像比例(我让图像视图的宽度为200px)。

let ratio = image.size.width / image.size.height
cell.messageImageViewHeightConstraint?.constant = 200 * ratio

我正在尝试使用此图像作为示例:

但它根本不起作用,图像占用了太多空间,并且由于某种原因,头像图像视图最终被隐藏(单元格被红色包围,上面是一个只有文本的单元格,可以正常工作) :

那么我在这里错过了什么?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

与您的使用方式相比,您的ratio 是倒置的:

最简单的解决方法是除以 ratio 而不是乘以它:

let ratio = image.size.width / image.size.height
cell.messageImageViewHeightConstraint?.constant = 200 / ratio

或者,如果您愿意,可以更改 ratio 计算:

let ratio = image.size.height / image.size.width
cell.messageImageViewHeightConstraint?.constant = 200 * ratio

【讨论】:

facepalm 谢谢!

以上是关于AutoLayout:在 UIStackView/UITableViewCell 中缩放 UIImageView 的问题的主要内容,如果未能解决你的问题,请参考以下文章

UIStackView 内的视图未使用 AutoLayout 调整大小

使用 AutoLayout 调整 UIStackView 的大小

Autolayout中的相对中心

iOS9新特性——堆叠视图UIStackView

UIStackView使用介绍

UIStackView“无法同时满足约束”“压扁”隐藏视图