在Xcode 4界面构建器/故事板中手动指定约束

时间:2013-07-04 11:40:50

标签: ios xcode4 interface-builder uistoryboard nslayoutconstraint

这似乎是一个非常基本的问题,但我找不到答案。

当我在故事板中向场景中添加元素,或者拖动它们或调整它们的大小时,Xcode会自动添加和删除约束来描述它们的大小和位置。

现在,一旦Xcode创建了特定类型的约束 - 比如高度约束 - 我知道我可以修改其属性 - RelationConstantPriority高度约束的情况 - 通过属性检查器。我无法弄明白的是如何手动添加或删除给定类型的约束,而不是依赖Xcode的魔力来为我这样做。

screenshot showing the same stuff described in the paragraph above

例如,在我当前的场景中,我有一个包含工具栏和表视图的ViewController。现在,我确切地知道我想用什么约束来描述这两个视图的垂直定位和大小:

  • 工具栏顶部的屏幕顶部有垂直空间0
  • 工具栏具有固定高度
  • 表格视图的底部有来自屏幕底部的垂直空间0
  • 表格视图的顶部有工具栏底部的垂直空间0

这样,表视图的高度将根据屏幕大小进行适当调整。

然而,Xcode凭借其智慧决定这不是我想要的,反而对我造成了以下限制(无论我多少随机拖动东西,它似乎都不想改变周围祈祷):

  • 工具栏顶部的屏幕顶部有垂直空间0
  • 工具栏的底部有来自屏幕底部的垂直空间526
  • 表格视图的屏幕底部有垂直空间0
  • 表格视图的固定高度为526

因此,当我尝试在较小的屏幕或容器中查看我的ViewController时,一切都会出错:

screenshot of EVERYTHING GOING WRONG

当我确切知道我需要的是令人沮丧时,无法手动设置我自己的约束。如何明确删除Xcode自动创建的废话约束并手动添加我自己的约束?

1 个答案:

答案 0 :(得分:1)

在IB / storyboard中使用约束时的问题是Xcode永远不会允许你有不明确的约束。永远。包括您在编辑过程中的时间。因此,每当您想要编辑多个约束时,Xcode可能会决定自动添加一些以防止不允许的状态。

这可能会很痛苦。我发现的一些工作是在我设置其他约束时在所有四个边上添加虚假约束。这 - 希望 - 保持IB的检查,并防止它添加完全愚蠢的东西。

您可以从顶部菜单添加约束。单击对象,然后单击菜单中的编辑器。您可以使用“对齐和固定”子菜单添加约束(稍后可以对其进行编辑)。

注意:并非所有约束都可以添加到IB中。例如,宽高比只能在代码中完成。

PS。 Xcode只允许你删除冗余的约束,即不会留下不明确的状态。因此,为了删除“b * * ** t”约束,您必须先添加足够的其他约束来创建允许状态。