AutoLayout - 使用水平约束保持图像的比例(Swift Xcode 6)

Posted

技术标签:

【中文标题】AutoLayout - 使用水平约束保持图像的比例(Swift Xcode 6)【英文标题】:AutoLayout - Keep Ratio of Image With Horizontal Constraints (Swift Xcode 6) 【发布时间】:2014-11-25 05:22:05 【问题描述】:

我一直在尝试实现图片的时间线(如 instagram 或 facebook)。 但是,我一直在努力解决图像的比例问题。

这是我的 xib,其中包含我的 Cell :

我希望图片保持其比例并完全填满单元格的宽度。 我在 UIImageView 上将 4 个自动布局约束设置为 0-0 用于水平约束,5-5 用于顶部/底部约束。我还将 ViewMode 设置为“Aspect Fit”。

我尝试了不同的设置:

    将 UIImageView 的高度设置为特定值: --> 修改图片的宽度以保持图片的比例 不要设置UIImageView的高度 --> 它认为高度等于0,因此甚至不显示图像 将高度设置为大于或等于特定值: --> 与1相同的行为。(修改图像的宽度以保持图像比例)

我正在从 URL 加载图像,因此我一直在使用具有以下功能的 lib Haneke (https://github.com/Haneke/HanekeSwift): imageView.hnk_setImageFromURL(url).

它具有图像的自动调整大小,我不知道如何获取图像的原始宽度/高度来手动设置高度。

同样,我想要的是图片保持其比例并完全填满单元格的宽度。

有人有建议吗?

非常感谢!

【问题讨论】:

【参考方案1】:

这是我想出的设置。这是一个快速而肮脏的演示,但我假设您希望图像始终居中。您可以在情节提要中设置水平和垂直中心约束以始终保持居中 如果您希望它始终完全填满视图,您可以将 Equal Height 替换为 Equal Width,但是这样做,由于纵横比限制,imageView 会在某些尺寸上跑出屏幕

我还包括了不同尺寸的视图屏幕截图

【讨论】:

感谢您的回答肖恩。你用哪个组件设置等宽?我尝试同时选择我的 UIView 和我的 UIViewImage,但“等宽”复选框被禁用。 另外,您将高度设置为什么值?正如我所说,如果我不放任何高度,它根本不会显示图像 imageView 设置为与 superView 等宽。我知道有两种方法可以做到这一点。 1. cmd+点击imageView,然后点击superView,然后你应该可以在storyboard底部选择Equal Width。 2.右键单击imageView,按住并拖动到superView,应该会出现一个弹出窗口,让您选择Equal Width。对于第二个问题,如果您设置了RatioEqual Width 约束,自动布局应该能够知道要显示的大小。 我已经完全按照你说的做了,不幸的是,我的 UIImageView 有一个错误缺少约束:“需要约束:Y 位置或高度”。这是因为我没有为我的 Superview 指定高度(因为高度应该是动态的) 这里说的是快速而肮脏的演示,如果有帮助,请告诉我。 dropbox.com/s/k2uytrwtfoycefc/AutolayoutDemo.zip?dl=0

以上是关于AutoLayout - 使用水平约束保持图像的比例(Swift Xcode 6)的主要内容,如果未能解决你的问题,请参考以下文章

图像视图autolayout从水平边缘固定到60pt,但自动刻度高度?

AutoLayout 和 Embedded stackview 约束冲突

AutoLayout:垂直到水平,没有明确的尺寸?

AutoLayout约束以适应矩形内的视图,保持一定的纵横比(以编程方式)

使用 Swift (AutoLayout) 固定 UIImage 的宽度和高度

如何使用 AutoLayout 制作均匀分布的图像行? [复制]