我应该使用啥约束来让图像视图方面填充其父视图的下半部分?

Posted

技术标签:

【中文标题】我应该使用啥约束来让图像视图方面填充其父视图的下半部分?【英文标题】:What constraints should I use to have an image view aspect fill the bottom half of its superview?我应该使用什么约束来让图像视图方面填充其父视图的下半部分? 【发布时间】:2016-10-15 08:57:54 【问题描述】:

我想创建一个故事板作为我的启动屏幕。我希望屏幕的下半部分有一个图像填充空间,同时保持其纵横比(它可以向下溢出,或者左右相等以保持纵横比,我不介意哪个)。屏幕的上半部分将为空。

为此奋斗了几个小时,却一无所获——我什至无法让图像填满屏幕的下半部分,更别提保持纵横比了。

我应该使用什么约束来让图像视图方面填充其父视图的下半部分?

【问题讨论】:

【参考方案1】:

就约束而言,您可以将图像视图的高度设置为其父视图的高度,然后将 0.5 的倍数添加到该约束,以便图像视图是其父视图高度的一半;然后将左右边距与父视图的左右边距对齐。

要保持纵横比并用图像填充图像视图,您可以将视图的内容模式设置为 Aspect Fill。

但由于 Aspect Fill 仍将图像垂直和水平居中,如果您希望图像“向下溢出,或左右相等”而不是向上,您可以通过编程方式裁剪图像以仅包含顶部在图像视图中可见的图像。例如,只显示图像的上半部分:

override func viewDidLayoutSubviews() 
    imageView.layer.contentsRect = CGRect(x: 0, y: 0, width: 1.0, height: 0.5)

【讨论】:

【参考方案2】:

我不知道它是否可能只使用自动布局,但我会怎么做:

您可以尝试向 superview 添加前导、底部和尾随约束,并将 imageView 高度设置为随机值(如果您使用 Web 服务,则在下载图像后立即更改此值)。现在你可以在你的文件中创建一个高度约束的出口。获得图像后,您可以调整其大小以适应屏幕,同时保持宽度与屏幕边界并保持其纵横比。根据您获得的图像大小更新高度约束。

【讨论】:

【参考方案3】:

我会推荐自动布局。

首先拖放一个 uiview (之后你将它隐藏) 将其设为 1 px 高度与宽度无关(如果您想从左到右设为 0px)。 现在将此视图垂直居中。

拖动您的图像视图并在视图上放置一个垂直间距(当然还有左下角和右下角)

希望这会有所帮助。

【讨论】:

以上是关于我应该使用啥约束来让图像视图方面填充其父视图的下半部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置相机视图以填充其父视图

如果我的子视图的大小与其父视图相同,如何使用 ctrl-drag 在 IB 中设置约束?

Xcode 约束问题

约束两个视图以使用视觉格式填充屏幕时忽略第二个视图的大小

使用 iOS 自动布局在子视图控制器与其父视图之间建立约束

Xcode Storyboard 图像大小