Xcode Autolayout - 约束等于另一个约束

Posted

技术标签:

【中文标题】Xcode Autolayout - 约束等于另一个约束【英文标题】:Xcode Autolayout - Constraint equal to another constraint 【发布时间】:2013-09-12 15:32:49 【问题描述】:

我终于尝试在 IB 中采用自动布局,但在为某些对象设置约束时遇到了麻烦。我基本上希望 5 个视图在整个超级视图中垂直平均分布。我有 3 个按钮,由 2 行分隔。我希望间距 D1、D2、D3 和 D4 相等调整任何东西的高度。在 IB 中如何设置?

【问题讨论】:

【参考方案1】:

您可以为 D1、D2、D3 和 D4 创建 UILayoutGuide 对象(或者,对于 ios 9 之前的 iOS 版本,UIView 对象),例如 spacer1spacer2 等,然后将它们的高度定义为等于每个高度。在视觉格式语言 (VFL) 中,垂直约束看起来像:

@"V:|-[button1][spacer1][separator1(4)][spacer2(==spacer1)][button2][spacer3(==spacer1)][separator2(4)][spacer4(==spacer1)][button3]-|"

我不知道你是如何表示你的分隔线的(这里我只是使用一个 4 点高的 UIView,但你可以按照你想要的任何方式来做)。但希望这能说明这个想法。

如果您在 Interface Builder 中执行此操作,您可以在可见控件之间添加 UIView 对象,然后选择所有间隔视图(例如通过按住 shift 单击),然后添加约束以固定“高度”相等”以使它们都具有相同的高度。

您可以通过在每个按钮和分隔线的NSLayoutAttributeCenterY 属性上创建约束并调整每个按钮的multiplier 值以使它们均匀分布,从而以编程方式在不使用分隔视图的情况下实现类似的效果。效果非常相似,但并不完全相同。

【讨论】:

很好的简单解决方案,可以直观地做到这一点。

以上是关于Xcode Autolayout - 约束等于另一个约束的主要内容,如果未能解决你的问题,请参考以下文章

如何在相同大小的类中给出不同的约束(xcode 8 AutoLayout)

Xcode Autolayout - 横向/纵向约束

AutoLayout - 使用水平约束保持图像的比例(Swift Xcode 6)

以编程方式创建 AutoLayout 约束 (IOS) Xcode 7.0.1

如何使用大于或等于编程 iOS AutoLayout 约束而不使布局模糊?

AutoLayout - 保持图像与水平约束的比例(Swift Xcode 6)