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
。对于第二个问题,如果您设置了Ratio
和Equal Width
约束,自动布局应该能够知道要显示的大小。
我已经完全按照你说的做了,不幸的是,我的 UIImageView 有一个错误缺少约束:“需要约束:Y 位置或高度”。这是因为我没有为我的 Superview 指定高度(因为高度应该是动态的)
这里说的是快速而肮脏的演示,如果有帮助,请告诉我。 dropbox.com/s/k2uytrwtfoycefc/AutolayoutDemo.zip?dl=0以上是关于AutoLayout - 使用水平约束保持图像的比例(Swift Xcode 6)的主要内容,如果未能解决你的问题,请参考以下文章
图像视图autolayout从水平边缘固定到60pt,但自动刻度高度?
AutoLayout 和 Embedded stackview 约束冲突
AutoLayout约束以适应矩形内的视图,保持一定的纵横比(以编程方式)