等宽和设置优先级的自动布局

Posted

技术标签:

【中文标题】等宽和设置优先级的自动布局【英文标题】:Autolayout with equal width and setting priority 【发布时间】:2015-11-18 08:33:49 【问题描述】:

您好,我需要根据某些条件显示 3 或 4 个按钮,因为我正在使用以下约束(下图)。

当我有 4 个视图时它工作正常,但对于 3 个按钮,第一个按钮的大小不相等,但其余按钮的宽度相同(下图)。我为水平间距约束设置了优先级 990,所以休息很好。

我正在情节提要中设置所有自动布局约束。

删除中间视图时如何实现等宽?

【问题讨论】:

用视图中的每个按钮设置每个按钮的约束 您需要删除约束,然后在删除视图后将约束添加回 3 个按钮。当您将第 4 个按钮添加回来时,您需要将约束添加回它。 【参考方案1】:

仅限 ios9 的应用程序:

这可能是使用新的Horizontal Stack View 的好时机。只需将distribution 设置为fill equally 并将alignment 设置为fill

对于 iOS8 支持:

您必须将组件之间的宽度约束设置为 equal width,并将 horizontal spacing 设置为 0

将 button1 设置为与 button2 等宽,然后将 button1 设置为与 button3 等宽。这应该足够了。

【讨论】:

iOS 9+ 提供水平堆栈视图,我需要 iOS8+ 支持 是的。这是一个耻辱。否则它是一个非常有用的组件。 完成了,这就是第三个和第四个按钮宽度相同的原因。 刚刚用三个按钮试了一下,效果很好。设置 b1.w = b2.w 和 b1.w = b3.w 就像我上面写的那样。【参考方案2】:

创建 3 个按钮,并将它们的宽度和高度设置为等于父视图(Superview)。 接下来为每个具有“1/3”值的按钮在“宽度约束”上设置乘数属性,如下所示:

【讨论】:

在某些情况下我需要显示 3 个按钮,而在少数情况下我需要显示 4 个按钮。因此,在情节提要中,我将有 4 个按钮,并且在基于条件的代码中,我将删除第二个按钮。理想情况下,它是一个 4 按钮视图。 好的,也许更简单的方法是以编程方式设置约束?

以上是关于等宽和设置优先级的自动布局的主要内容,如果未能解决你的问题,请参考以下文章

具有 3 个等宽标签的自动布局

具有自动布局的水平放置等宽等水平空间按钮

自动布局如何在具有 3 个等宽视图的视图中隐藏 1 个视图

ElegantSnap 一个优雅的,易用的iOS/tvOS/macOS自动布局框架, 超级详细的使用教程,多视图水平等宽/垂直等高排列

自定义 UITableViewCell 中标签的自动布局优先级

如何使用固定宽度和自动布局正确缩放图像?