UIImageView 高度不是自动布局约束后子图像高度的高度。

Posted

技术标签:

【中文标题】UIImageView 高度不是自动布局约束后子图像高度的高度。【英文标题】:UIImageView height not height of child image's height after autolayout constraints. 【发布时间】:2015-07-23 17:20:33 【问题描述】:

我的目标:

图像的宽度 == 屏幕的宽度。 纵横比保持不变,因此高度会自动调整。 UIImageView 的高度 == 子图像的高度。 (您将在下面看到当前无法正常工作的内容)

我正在使用 XCode 6,AutoLayout 约束故事板来完成这个。


查看以下 2 个屏幕截图,了解 (1) 应用当前的外观以及 (2) 我需要修复的内容。

正如您在屏幕截图左侧看到的那样,我的故事板已选择图像视图。

imageview 的宽度覆盖了屏幕的宽度 我已将背景颜色设置为黑色,这样您就可以看到 imageview 如何拉伸它的高度。 查看屏幕截图的最右侧,查看到目前为止我设置的 3 个约束。前两个是为了适应屏幕上的图像视图,最后一个是确保它位于导航栏下方。很正常的约束。

到目前为止,看截图,我的前 2 个目标是满意的。图像的宽度是屏幕的宽度(您可以在屏幕截图中的 iPhone 4 预览中看到),并且纵横比保持不变。


现在,这就是我遇到的问题......

如何消除图像上方和下方的黑色空间?黑色来自图像视图。 我希望图像视图的高度与其内部图像设置的高度相同。


我的一些猜测:

是否应该为每个可用的尺寸等级创建约束?因此,与其编辑 wAny 和 hAny,不如为 iPhone 设置 imageview 的高度限制,为 iPad 设置一个使用其特定尺寸类的高度限制? 如果我删除前导和尾随约束,它似乎摆脱了黑色空间,但图像视图不再适合屏幕,因此需要约束。有没有其他方法可以让 imageview 的宽度成为屏幕的宽度,而不是使用这些约束?

【问题讨论】:

【参考方案1】:

将以下约束添加到 imageView:

“纵横比”约束,乘数设置为 imageView 的纵横比。

例如:

如果图像的尺寸为 (600 x 300),则“纵横比”乘数将为 2:1

【讨论】:

是的,做到了!非常感谢! 如果图片是动态加载的,你不知道长宽比是多少,你会怎么做?一定要取 UIImage 并计算比例吗?

以上是关于UIImageView 高度不是自动布局约束后子图像高度的高度。的主要内容,如果未能解决你的问题,请参考以下文章

UIImageView 创建额外的宽度/高度约束

自动布局:需要 y 位置或高度的约束

内容拥抱和内容压缩阻力、自动布局约束的问题

UILabel 动态高度和 UIImageView 恒定高度

UIImageView 不是 StackView 和 TableViewCell 中的自动高度

UIImageView 在具有不同高度的自定义 UITableViewCell 内自动调整大小