放置 2 个按钮和 1 个文本字段 - 约束是超级视图而不是兄弟姐妹

Posted

技术标签:

【中文标题】放置 2 个按钮和 1 个文本字段 - 约束是超级视图而不是兄弟姐妹【英文标题】:Placing 2 buttons and 1 text field - the constraints are to superview and not siblings 【发布时间】:2015-01-02 15:16:15 【问题描述】:

在 Xcode 6 中,我试图将 2 个按钮和 1 个文本字段放在 1 列中,彼此上方:

首先我选择顶部按钮(“扫描...”)并将其 3 个约束设置为 8 个像素:

这很好用。

但是当我对下一个按钮(“连接...”)尝试相同的操作时 - 它的顶部约束与超级视图相关,而不是与其他按钮相关。

我在 Interface Builder 中四处搜索,检查约束属性 - 但找不到修复它的地方。

我可以在哪里切换约束 - 如果它与超级视图或兄弟视图有关?

【问题讨论】:

【参考方案1】:

界面构建器将最近邻居标识为所需方向上最近的同级视图,不重叠。因此,可能会阻止您在 2 个按钮之间添加约束的是它们是重叠的,您应该尝试将连接按钮向下移动。

在任意 2 个视图之间添加约束的另一种方法是在左侧面板中的一个视图上按 Ctrl+Clic,然后在要创建的约束的另一个视图上释放指针。

【讨论】:

谢谢+1。当我按住 Ctrl 键单击 2 个按钮时,我当前的问题是负/正:我不确定将什么设置为 First Item、Second Item 和 +Constant(我在那里尝试不同的值并交换它们......)我想知道 Y -axis:它是从顶部开始并在 Interface Builder 中向下增长的吗? 如果您不确定哪个视图是第一个或第二个,您可以从数学角度看一个约束:A = 乘数 * B + 常数(其中 A 是第一个视图的属性, B 是第二个视图的属性)。例如,使用“垂直间距”约束,A 是第一个视图的底部,B 是第二个视图的顶部,因此常数 20 将导致第二个视图比第一个视图低 20px。关于轴,UIKit 中的约定是左上角的原点。【参考方案2】:

您可以 CTRL + 从连接按钮拖动到扫描按钮,以专门设置与这两个按钮相关的约束。

【讨论】:

以上是关于放置 2 个按钮和 1 个文本字段 - 约束是超级视图而不是兄弟姐妹的主要内容,如果未能解决你的问题,请参考以下文章

如何设置纵向和横向约束

基于子视图约束的超级视图没有增加高度

阻止 UITextField 水平扩展

自动布局根据文本调整按钮大小并让文本字段填充可用空间

如何调整超级视图的大小以符合子视图约束

如何允许自动调整UIButton的大小以满足间距约束