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 的纵横比约束并将UIImageView
的contentMode
更改为Aspect Fill
并设置imageView.layer.maskToBounds = true
。然后给图像一个自定义宽度,如 100,然后您设置为此 imageView
的所有图像将具有 300x300 大小,如果图像的原始大小是 200x200,那么即使图像的原始纵横比不是 1:1
,它也会放大到 300x300它仍会缩放为1:1
。
不知道这是否应该是正确的答案。我对位置有限制,我想告诉自动布局以保持其固有的内容大小。通过将拥抱/压缩优先级设置为高,图像不再调整大小。
@Ayazmon 我想尽可能避免硬编码像素值。我不想使用数字,只是告诉自动布局保持内在内容大小,无论发生什么都不会缩放。
【参考方案1】:
不要对您的UIImageView
设置任何高度或纵横比约束,只需设置适合您需要的宽度约束或前导和尾随约束即可。并制作contentMode
AspectFill
。
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 动态高度
让自定义 TableViewCell 的 UIimageView 宽度为单元格宽度的 1/3,单元格高度 = 图像纵横比