自动布局设置六个方形图像

Posted

技术标签:

【中文标题】自动布局设置六个方形图像【英文标题】:Autolayout to set six square images 【发布时间】:2015-12-15 12:52:10 【问题描述】:

我想实现自动布局以设置六个方形图像,即使屏幕尺寸发生变化,它们也始终是方形的。 我尝试了太多的变化,但没有这样做。 在附图中,我分享了将应用自动布局的示例视图。

【问题讨论】:

左上角的正方形和其他正方形之间是否有特定的比例? 是的,它是 3(左上):1(其他)。 您尝试了什么,有什么问题?有很多方法可以实现这一点... 【参考方案1】:

您不需要任何视图包装器或其他有趣的业务,您可以完全在每个项目之间的 IB 或 AL 约束内完成。 “诀窍”是考虑每个项目之间的关系并同时使用常数和乘数。

这里的每个方块都是 1:1 的比例。 橙色方块与第一个黄色方块的比例为 2:1,加上 8 用于填充。 橙色方块固定在左侧,第一个黄色方块固定在右侧。 所有其他黄色方块都是第一个的相对宽度。

这也是故事板文件:

https://www.dropbox.com/s/pk8iwj1beamkxtp/SO_Solution-20151215_2.storyboard?dl=0

根据评论,我添加了一个包装器视图,以便在您希望整个事物始终可见时轻松应用尺寸类。 (也可以更轻松地放入另一个故事板)。

【讨论】:

当比率不为 2 且设备处于横向时,此解决方案会导致一些问题:底部的方块在视图之外。 没有看到保持所有方块都可见的条件,但也可以添加。 2:1 以外的比率在这里也可以使用,但需要在我的示例中设置一些不同的约束。如果没有 2:1,您将需要更多的右侧和底部方格。 @MichaëlAzevedo 小改动以支持两种布局,以及一些有趣的动画 gif。 :) 展示它的最佳方式适用于各种屏幕尺寸和方向 ;)【参考方案2】:

好的,我会给你一个简单的方法来实现这一点,但这是我的实现,我很确定有很多更简单的实现。

首先,创建一个空的子视图,并添加约束,使视图始终是左上角的正方形:

Trailing Space to superview >= 0
Trailing Space to superview = 0 @750
Top Space to superview = 0
Left Space to superview = 0
Bottom Space to superview = 0 @750
Bottom Space to superview >= 0
Aspect ratio : 1

现在在这个正方形中添加左上角的正方形和 topRightView :

// TopLeftView constraints :
Leading Space to superview = 20
Top Space to superview = 20
Aspect ratio : 1

// TopRightView constraints :
Trailing Space to superview = 20

// Contraints between TopRightView and TopLeftView
Align bottom
Align top
Equal Width
Horizontal spacing = 20

您现在可以通过设置“等宽”约束的乘数值来设置正方形之间的比率。让我们使用 1/3 乘数。

现在让我们添加bottomLeftView。为了不过度约束我们的视图,我们不需要在正方形高度和这个视图高度之间设置一个乘数。我们知道绿色方块右边的空间等于它下面的空间,所以我们只使用间距和对齐约束。

// BottomRight constraints:
Bottom Space to superview = 20

// Contraints between BottomLeftView and TopLeftView
Align left
Align right
Vertical spacing = 20

最后一个要添加的视图是 BottomRightView,对齐约束效果很好:

// Contraints between BottomRightView and BottomLeftView
Align top
Align bottom

// Contraints between BottomRightView and TopRightView
Align left
Align right

我们到了。现在您只需要在 TopRightView 的顶部和底部以及 BottomLeftView 的左侧和右侧添加方形子视图。您还可以使用单个变量更改比率,如果您在 TopLeftView 和 BottomLeftView 之间设置了比率约束,则这是不可能的。

【讨论】:

以上是关于自动布局设置六个方形图像的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局制作完美的正方形

iOS 自动布局:这可以用 IB 完成吗?

使用自动布局创建一个大正方形的网格

如何正确设置水平图像视图的自动布局约束?

如何使用自动布局在情节提要上使网格并排 uiview 响应

我可以设置我的自动布局约束,以便将图像视图设置为图像的高度