UIImageView 约束为 1:1 纵横比和 1:1 缩放到原始?

Posted

技术标签:

【中文标题】UIImageView 约束为 1:1 纵横比和 1:1 缩放到原始?【英文标题】:UIImageView constraint to be 1:1 aspect ratio and 1:1 scaled to original? 【发布时间】:2018-10-17 14:51:54 【问题描述】:

有什么简单的方法可以实现 1:1 的纵横比并缩放到 ImageView 中的原始图像?

我不想只保持图像纵横比,我希望它与基础图像的大小完全相同(也与原始图像 1:1 比例)...不更小,不更大...所以它将在屏幕上以像素或 UIKit 点为单位或 w/e 为 1:1(缩放 1)。

如果您只设置纵横比,图像可能会放大或缩小,同时保持纵横比。我想阻止这种行为并告诉它不要扩展。

如何将比例设置为 1 作为约束?有什么方法可以做到这一点,而无需对宽度/高度约束进行任何硬编码以匹配原始图像的大小?

基本上我想告诉自动布局...这是图像,不要触摸它,无论如何都不要缩放它,让它与原始图像完全相同(缩放1)。

更新:

我能做到这一点的唯一方法是将拥抱/压缩优先级设置为高于布局中的其他项目。仅设置纵横比约束是不行的...我认为没有其他方法可以确保这种行为而不涉及压缩/拥抱优先级。

【问题讨论】:

看看这个答案:***.com/a/42654375/2581843 在发布之前我已经看过那里...我发现仅在我的情况下,将图像内容拥抱优先级设置为高可以解决问题,并将图像保持为原始图像,但没有它向上缩放。 您可以添加 1:1 的纵横比约束并将UIImageViewcontentMode 更改为Aspect Fill 并设置imageView.layer.maskToBounds = true。然后给图像一个自定义宽度,如 100,然后您设置为此 imageView 的所有图像将具有 300x300 大小,如果图像的原始大小是 200x200,那么即使图像的原始纵横比不是 1:1,它也会放大到 300x300它仍会缩放为1:1 不知道这是否应该是正确的答案。我对位置有限制,我想告诉自动布局以保持其固有的内容大小。通过将拥抱/压缩优先级设置为高,图像不再调整大小。 @Ayazmon 我想尽可能避免硬编码像素值。我不想使用数字,只是告诉自动布局保持内在内容大小,无论发生什么都不会缩放。 【参考方案1】:

不要对您的UIImageView 设置任何高度或纵横比约束,只需设置适合您需要的宽度约束或前导和尾随约束即可。并制作contentModeAspectFill

ImageView 将自动缩放以匹配它所持有的图像的纵横比。但是请确保高度

【讨论】:

【参考方案2】:

contentMode 设置为aspectFit

见Apple official documentation:

通过保持纵横比来缩放内容以适应视图大小的选项。视图边界的任何剩余区域都是透明的。

【讨论】:

【参考方案3】:

尝试将 ImageView 的 ContentMode 设置为 Center

还记得将剪辑设置为边界。

imageView.clipsToBounds = true
imageView.contentMode = .center

【讨论】:

以上是关于UIImageView 约束为 1:1 纵横比和 1:1 缩放到原始?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 UITableViewCell 与 UIImageView 动态高度

具有自动布局和最大尺寸保持纵横比的 UIImageView

让自定义 TableViewCell 的 UIimageView 宽度为单元格宽度的 1/3,单元格高度 = 图像纵横比

了解纵横比约束和乘数

如何使用 SnapKit 在 iOS 中使用纵横比约束?

布局约束将图像大小调整为屏幕宽度保持纵横比