最大化纵向 UIImageView 的区域,使其保持在超级视图的中心 Y 点上方

Maximizing the area for a UIImageView in portrait orientation, keeping it above the superview's center Y point

什么有效:

我有一个 UIViewController,它在横向时在左侧有一个 UIImage。我希望图像尽可能大,但不应超出场景的左半部分。似乎您可以通过添加一个约束来做到这一点,该约束要求父视图的 "Center X Between Margins" 值始终大于或等于图像的后缘。

什么不起作用:

同样,相同的 UIImage 应该在纵向场景的顶部。图像应该很大,但不要延伸到场景的上半部分以下。我希望添加一个约束,要求 superview 的 "Center Y Between Margins" 值大于或等于图像的底部边缘,但如何实现这一点并不明显。从图像向下拖动到超级视图会在图像底部和 "Bottom Layout Guide.Top" 之间创建一个约束。我在 Size Inspector 中检查了用 Superview.CenterYWithinMargins 替换它的选项,但没有成功。

相反,如果您转到“大小检查器”并单击 "Bottom Layout Guide.Top",则会出现选项 "Center Y",但它是灰色的。我怀疑 Bottom Layout Guide 不是要使用的对象,但还没有找到指定其他对象的机制。

问题:

约束 UIImageView(或任何视图,就此而言)使其底部边缘不延伸到超级视图中心 Y 下方的最佳方法是什么?

知道为什么横向约束选项与纵向约束选项如此不同吗?

谢谢!

让我们从第一个命题开始:

I want the image to be large as possible, but it should not extend beyond the left-half the scene

您没有解释图像视图的确切位置,但为了便于讨论,我们假设它位于左上角。那么它将有这四个约束:

  • top 固定到 superview top

  • left 固定到 superview left

  • 宽度设置等于父视图宽度但乘数为 1/2

  • 宽高比(宽高比)设置为图片本身的宽高比

现在我们来看第二个命题:

at the top of the scene in portrait orientation. The image should be large but not to extend below the top half of the scene

同样,我假设我们在左上角。那么约束条件是:

  • top 固定到 superview top

  • left 固定到 superview left

  • 高度设置为父视图高度但倍数为 1/2

  • 宽高比(宽高比)设置为图片本身的宽高比

如您所见,在横向和纵向之间旋转时只需要换掉一个约束。这可以在没有代码的情况下进行配置(对于 iPhone;对于 iPad,您需要代码来进行交换)。

这是结果的屏幕截图。在纵向中,我们不会延伸到上半部分以下:

在横向中,我们不会超出左半部分: