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

In Xcode, how can you rename a constraint in a Storyboard?

我正在 Xcode 中处理情节提要,并且我将标签添加到我正在处理的视图控制器中。因为我试图让我所有的应用程序都使用 Auto-Layout,所以我的第一反应是向 Label 添加 Auto-Layout 约束。所以我在标签所在的超级视图的上边缘和左边缘添加了 2 个约束。我还在标签本身的宽度和高度上添加了约束,我知道我可以在之后修改约束的值以将它们设置为我希望他们成为什么样的人。我的情节提要如下所示:

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

然后我意识到我的约束仍然引用"Label"和"View",所以我去重命名它们。我突出显示了宽度的约束,按下回车键并得到一个编辑文本字段,并将单词 "Label" 替换为 "Title" 并再次按下回车键。编辑文本字段关闭,但约束名称变回 "Label" 而不是我输入的 "Title"。我又试了一次,同样的结果。我尝试使用高度约束,结果相同。它不会让我更改约束的名称。所以我删除了宽度约束和 re-made 宽度约束。现在它具有引用 "Title" 而不是 "Label" 的正确名称。但是我不想每次更改约束所绑定的 UI 元素的名称时都必须删除约束并重新创建它。

在更改约束所绑定的元素的名称后,是否有任何方法可以重命名约束?

由于最近这在几个应用程序中一直困扰着我,所以我进行了大量搜索,试图找到一种方法来做到这一点。我在文本编辑器中打开 Storyboard 文件来搜索文本,但它不存在。我查看了堆栈溢出,但找不到任何关于重命名故事板约束的信息。然后我偶然发现了一个解决方案。这是我的解决方案。

单击您要更改的约束(首先执行宽度,但这并不重要)。在实用程序 right-hand 部分中,在第三个选项 "Identity Inspector" 下,在 "Document" 部分中有一个 "Label" 文本框,其占位符文本为 "Xcode Specific Label"。如果在约束上按 Enter,则可以突出显示现有名称并复制它。然后转到身份检查器中的标签文本框并将其粘贴到那里。您可以将单词 "Label" 更改为 "Title" 以适应新名称,然后按回车键。您会在情节提要层次结构中看到约束名称发生变化。

但是您还没有完成!假设您想将标题的文本更改为您的特定标题名称:"My Specific Title"。那么,当您这样做时,标签将不会足够宽以显示所有文本,因此您将宽度限制更新为 140,现在您可以看到整个标题。但是当您希望它读取 "Width - (140) - Title" 时,您的约束仍然显示 "Width - (42) - Title",因为您刚刚将宽度更新为 140.

事实证明,当您在 Identity Inspector 的 "Label" 字段中有任何文本时,它总是会说出该文本是什么。但是在您最初将名称更改为 "Width - (42) - Title" 以匹配您的标签名称并按回车键或单击另一个字段(任何可以让它接受文本更改的内容)之后,您可以删除标签文本框和您的约束仍将引用新名称,然后在您更改约束时自动更新。因此,如果您将宽度约束更改为 140,它现在将显示为 "Width - (140) - Title"。

所以在你改变了一个元素的名字之后你还想改变约束的名字,只需将当前的约束名称复制并粘贴到那个标签文本框中,按回车键得到它来进行更改,然后将其从标签文本框中删除。

请注意,您无法更改约束名称的唯一原因是元素的名称已先更改。如果您更改约束中的文本,而它仍然与约束中引用的元素匹配,那么它会让您更改它,并且它会自动将新名称放入身份检查器中的标签文本框中。然后您可以更改元素的名称以匹配您在约束名称中输入的名称。但是因为您在该标签文本框中有文本,所以约束将始终显示该文本。因此,在元素名称与约束名称中的新文本匹配后,我建议从标签文本框中删除文本,以便在更改约束时约束名称将 auto-update。