等宽和设置优先级的自动布局
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 按钮视图。 好的,也许更简单的方法是以编程方式设置约束?以上是关于等宽和设置优先级的自动布局的主要内容,如果未能解决你的问题,请参考以下文章
ElegantSnap 一个优雅的,易用的iOS/tvOS/macOS自动布局框架, 超级详细的使用教程,多视图水平等宽/垂直等高排列