Cocoa Autolayout - 为什么我不能删除或修改文本字段上的(紫色)宽度约束?

时间:2012-01-02 19:03:43

标签: cocoa layout interface-builder osx-lion

我正在使用autolayout构建一个简单的应用程序,我遇到了一个奇怪的情况。我在一个大的开放视图的空白部分放置一个文本字段,这样除了超级视图之外不会受到任何影响,但是当我尝试将“宽度”约束修改为> =而不是==时,它会创建一个新的约束并拒绝修改旧的约束。我无法删除它,或更改其任何属性,因为它只是创建一个新属性。

这是两个约束的比较,紫色的一个是顽固的,蓝色的是新创建的。

Constraint comparison

为什么紫色的圆形不可修改?

5 个答案:

答案 0 :(得分:17)

我已经通过将优先级设置为1来解决IB中不可删除但不需要的约束的问题。看起来不是正确的事情,但有时我不够聪明,不能成为Cocoa开发人员。

答案 1 :(得分:11)

我的问题与以下事实有关:没有添加足够的其他约束,宽度将被强制改变。当我添加更多其他约束(例如前导和尾随空格)时,我就可以改变紫色约束(事实上,它消失了,我不得不添加自己的约束)。

似乎很奇怪你不能添加你自己的约束,除非它们有可能被破坏,但我想这是它在某些情况下被整合到IB中的方式。

答案 2 :(得分:6)

降低紫色约束的优先级也会使它们可编辑。

答案 3 :(得分:2)

我有类似的情况,其中有两个多线标签。根据内容大小,两者都应调整大小。

Two multiline labels

当第一个标签调整大小时,它会覆盖第二个标签,因为第二个标签有一个垂直空间约束(“TopView to SuperView = 40”。它是系统默认约束 - 紫色)我无法删除/修改。

如果我尝试将其修改为“TopView to SuperView> = 40”,则会将其更改为用户约束(蓝色),并创建一个新的紫色约束“Top Space to SuperView = 40”自动。

我想这可能是原因:

当我尝试将约束更改为“Top Space to SuperView> = 40”时,标签的默认位置未定义:> = 未指定默认位置。它仅指定“职位范围”。然后我通过选择两个标签并将它们之间的空间设置为常量来添加新约束。 adding constraint between two labels

现在,由于第一个标签从顶部边框有一个明确的位置(垂直空间= 15),第二个标签比第一个标签低5个点,所以第二个标签定义了一个垂直位置。我能够删除紫色垂直空间约束。

现在,如果我删除两个标签之间的约束,第二个标签将不再具有定义的位置,系统将自动为标签创建紫色约束。

答案 4 :(得分:-2)

右键单击约束时,选择“提升为用户约束”。下次单击约束时,您将能够将其删除,因为它现在由用户/开发人员完成。