在Xcode中,如何在Storyboard中重命名约束?

时间:2015-03-26 23:43:00

标签: ios xcode constraints xcode-storyboard

我正在使用Xcode中的Storyboard,我在我正在处理的视图控制器中添加了一个Label。由于我尝试使用我的所有应用程序使用自动布局,我的第一反应是向Label添加自动布局约束。所以我在Label所在的超级视图的顶部和左边添加了2个约束。我还为标签本身添加了Width和Height的约束,我知道我可以修改约束的值然后将它们设置为我希望他们成为什么样的人。我的故事板看起来像这样:

Label with 4 constraints

然后我意识到我忘记将标签的名称更改为更具描述性的内容。由于这是我的主视图的标题标签,我将标签重命名为“标题”,并将顶级视图重命名为“MainView”。所以现在我的故事板看起来像这样:

Title in MainView with constraints

然后我意识到我的约束仍然引用“Label”和“View”,所以我去重命名它们。我突出显示了Width的约束,按下enter并获得了一个编辑文本字段,并将“Label”替换为“Title”并再次按Enter键。编辑文本字段已关闭,但约束名称返回为“标签”而不是像我键入的“标题”。我再次尝试,同样的结果。我尝试了高度约束,同样的结果。它不会让我更改约束的名称。所以我删除了Width约束并重新制作了Width约束。现在它有正确的名称引用“标题”而不是“标签”。但是我不想删除约束并在每次更改约束所绑定的UI元素的名称时重新创建它。

在更改约束绑定到的元素的名称后,有没有办法重命名约束?

1 个答案:

答案 0 :(得分:5)

由于最近在几个应用程序中一直困扰着我,我做了很多搜索,试图找到一种方法来做到这一点。我在文本编辑器中打开了Storyboard文件来搜索文本,但它并没有。我查看了堆栈溢出,但无法找到有关重命名故事板限制的任何内容。然后我偶然发现了一个解决方案。这是我的解决方案。

单击要更改的约束(首先执行宽度,但实际上并不重要)。在Utilities右侧部分的第3个选项" Identity Inspector",在" Document"部分有一个"标签"带有占位符文本的文本框说" Xcode Specific Label"。如果在约束上按Enter键,则可以突出显示现有名称并进行复制。然后转到Identity Inspector中的Label文本框并将其粘贴到那里。你可以改变单词" Label"到"标题"要适合新名称并按Enter键。您将在Storyboard层次结构中看到约束名称更改。

但你还没完成!我们假设您想要将标题的文本更改为您的特定标题名称:"我的特定标题"。好吧,当你这样做时,标签不会足够宽以显示所有文本,所以你去更新宽度约束为140,现在你可以看到整个标题。但你的约束仍然表示"宽度 - (42) - 标题",当你想要它阅读"宽度 - (140) - 标题"因为你刚刚将宽度更新为140。

事实证明,虽然你有任何文字"标签"在Identity Inspector中的字段中,它总是会说出该文本的内容。但是在你最初改名后说'&34;宽度 - (42) - 标题"要匹配您的Label的名称并按Enter键或单击另一个字段(任何将使其接受文本更改的内容),您可以删除Label文本框的内容,您的约束仍将引用新名称,然后自动更改约束时更新。因此,如果您将宽度约束更改为140,它现在将读取"宽度 - (140) - 标题"。

因此,在更改元素的名称并且您想要更改约束的名称之后,只需将当前约束名称复制并粘贴到该Label文本框中,按Enter键使其进行更改,然后从标签文本框中删除它。

请注意,您无法更改约束名称的唯一原因是因为首先更改了元素的名称。如果更改约束中的文本,但它仍然与约束中引用的元素匹配,那么它将允许您更改它,它将自动将新名称放在Identity Inspector中的Label文本框中。然后,您可以更改元素的名称以匹配您在约束名称中输入的名称。但是因为您在Label文本框中有文本,所以约束将始终显示。因此,在元素名称与约束名称中的新文本匹配后,我建议从Label文本框中删除文本,以便在更改约束时约束名称将自动更新。