Xcode故事板警告:约束引用项在当前配置中已关闭。在当前配置中关闭此约束


146

此警告发生在Xcode 6.1中。任何人都知道此警告意味着什么以及它将发生什么?非常感谢!

以下是在源代码中打开警告的屏幕截图”

在此处输入图片说明

如何查找哪个约束导致警告?Xcode不会告诉您哪个约束是问题所在。

在此处输入图片说明


@wumm是的,该应用程序可以成功构建和运行,我只是担心某些潜在问题可能会以某种方式发生,而我还没有遇到。
杨志浩2014年

7
请注意,一般而言,此问题是由以下原因引起的:您有一个未安装的项目,但是它具有仍然安装的约束。通常,找到未安装的项目,并针对其所有限制,将其标记为未安装。
Fattie

@Fattie请使用此主要原因编辑可接受的答案。谢谢
Milan Kamilya

Answers:


431

从Xcode 6.1.1开始,此警告可能很烦人。主要问题是您无法通过单击警告轻松找到引用的约束。我猜这是一个错误,迟早会得到修复。

但是,与此同时,您可以使用以下解决方法:

步骤1:检测烦人的警告😱

烦人的警告

第2步:右键/按住Ctrl点击警告,选择Reveal in Log😨

在此处输入图片说明

步骤3:欣赏以下日志片段的优美之处:

... snip ...
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:Dlb-cb-nWC: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:6Ze-mO-v5N: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:9av-xw-u1o: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:RPt-Uf-vaZ: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:Rnc-4M-7jV: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:epJ-D9-KEF: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:4HC-Gu-01w: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
... snip ...

嗯...这是什么...?

有趣

步骤4:让我们把它扔到项目搜索栏中...

搜索

😮是的,你猜对了。点击它。

步骤5:😁天哪!在Apple解决此烦人的错误之前,请多花几分钟的时间才能工作。😎

ee


对于2016年...

  • 如果无法通过“显示日志”来获取它,请显示“报告导航器”。(这是最左侧一列的最右侧选项卡。)在此处深入研究构建结果。这将显示构建日志,包括约束ID。礼貌buildsucceeded

在此处输入图片说明

在此处输入图片说明

  • 请注意,对于5/2016的Xcode,在某些情况下,您必须退出并重新启动 Xcode才能清除此警告。

  • 请注意,令人困惑的是,一个不相关的问题(这似乎是Apple错误或错误语言的使用不当)可能导致相同的错误:如果您有IBInspectable项目,并且碰巧在Swift文件中将其重命名。Xcode中并没有删除旧名UserDefinedRuntimeAttributes为您服务。只需单击“身份检查器”(右侧面板上的项目3),然后删除未使用的项目。

对于2017年...

  • 问题的另一个常见且实际上更简单的原因。如果您碰巧要卸载某个项目:在撰写本文时,非常简单的Xcode 不知道会自动卸载导致该项目的所有约束。简而言之,请查看所有未安装的项目,并针对所有限制将它们标记为未安装。(或者简单地说,也许只是暂时完全删除未安装的项目,以查看是否是问题所在。)

28
这种解释是惊人的。谢谢!
thomasmalt 2015年

7
我本周最喜欢的答案:)而且非常有用。谢谢!
2015年

5
我认为从现在开始,答案中就必须使用表情符号。
James Webster

3
如果像我这样,“日志中的显示”显示为灰色怎么办?
bakalolo 2015年

6
右键- >显示日志是什么都不做,所以我开了以此为参考日志:stackoverflow.com/questions/19014359/...
terrigenus

39

当您停用情节提要中的视图但未禁用基于该视图的约束时,将触发此消息。

例如,您停用了一个按钮,但是仍然有一些约束链接到该按钮。它可以是诸如高度或宽度之类的固有约束,也可以是诸如与另一视图的距离之类的相对约束。

您必须关闭引用该视图的每个约束,并且必须手动进行。Xcode在这里过于保守,不会为您做到这一点。


4
谢谢您的回复!您能否更具体地说明什么是“停用视图”?是否要删除视图(如按钮)?但是由于我已经删除了它,所以约束可能也被删除了,找不到了吗?以及如何更详细地“关闭约束”,只需选择并删除它即可?非常感谢你!
皓阳

2
如果某个视图在其当前大小类中未在Interface Builder中标记为“已安装”,则将其停用。
DivideByZer0

我的情节提要中有许多ViewController。¿我怎么知道哪个子视图未安装?
Jobima 2015年

您可以右键单击警告并选择选项“源代码”。在那里,您应该清楚地看到受尊重的视图控制器中相应视图的层次结构。
ZaEeM ZaFaR

15

此解决方案对我有用。

因为我将我在Xcode 5中开发的项目中的多个项目复制到Xcode 6中,并且Xcode 6中的情节提要支持多种布局,所以对于每个约束,我都需要将其安装在当前配置中。

例如,我使用“紧凑宽度|常规高度”,对于约束,我需要如下设置:

在此处输入图片说明

在检查并设置项目中的所有数百个约束(清理和构建)之后,警告最终消失了。


1
请注意,Installed视图对象属性中也有那些讨厌的复选框。因此,请确保您认为正在显示的视图对象已选中正确的复选框。警告是告诉您某些对象未显示在中current configuration
马特

这也为我工作。XCode说我有12或13条警告,但在日志中查找其中至少有100条。因此,我仔细检查了每个警告,为每个约束添加了wChR,然后取消选中通用的“已安装”。警告消失了!
安德里亚斯(Andreas)

哦,忘了提。我了解到大约一半,您实际上可以通过同时选择多个约束来一次完成此过程。
安德里亚斯(Andreas)

8

只是想添加我的案例,这个错误是如何发生的:在我的案例中,我想删除带有“ Cmd + Backspace”的文本字段。我直接在Scene-Builder Tree-View中执行了此操作:

在此处输入图片说明

您会看到贪睡字段显示为灰色。

所以对我来说很容易发现。您可以通过选择以下选项来简单地删除字段:

从菜单编辑删除

令人惊讶的是,这确实删除了该字段(包括约束)。也许这可以帮助某人轻松找到此烦人的警告的原因...


这并不能真正回答问题。如果您有其他问题,可以点击提问进行提问。一旦您有足够的声誉,您还可以悬赏以吸引更多对此问题的关注。- 评分
马丁埃文斯

3
这是可以解决问题的另一种方法。因此,只想添加此内容以帮助其他人……
Dirk

谢谢,非常有帮助
Ahmed Elashker '16

该答案缩小了查找和解决问题的范围。它为我工作!
Lance Samaria '11

6

扩展说明

其他答案都没错。我只是想提请注意原始警告中措词,并确定几个用例可以在一个人的工作流程中显示。

约束警告

约束引用项在当前配置中已关闭。

这意味着在一个或多个约束中引用的某些项目(通常是通常可见的控件或自定义视图)被关闭(禁用或未选中“已安装”复选框)。例如,如果您决定要在主视图之外的情节提要中将控件或视图移动到控件(或有时在执行大小类有趣的操作时可能会看到),则如果控件附加了约束,则可能会看到此警告。

卸载控件

连同推荐的解决方案:

在当前配置中关闭此约束。

两种修复方法

文件大纲

在视觉上,您可以在情节提要中打开“文档大纲”,然后找到灰色的约束,这些约束引用了位于主视图之外的控件/视图(加宽大纲,单击约束,并查看属性检查器,单击鼠标右键以快速查看) 。然后从该上下文中删除约束(大小类)。例如,在我的情况下,我只是握住控件,直到我决定稍后在哪里展示它,因此我选择完全删除有问题的约束,直到以后。但是在大小类中,我只是使用属性检查器中已安装的复选框从当前上下文中卸载约束。

日志导航器/查找工具

人们还可以继续使用日志导航器,通过为故事板上的每个对象赋予唯一标识符来查找问题控件。在日志中,它恰好在黄色突出显示的文本之前,并且通常采用上述示例中所示的形式:jvj-mY-DHf

然后,可以使用标识符使用Xcode中的查找工具来定位和删除(完全)或卸载(对于当前上下文)违规约束。

日志导航器

如果您喜欢Xml及其简单性,也可以将Storyboard作为源代码打开,找到有问题的唯一标识符,然后删除相应的xml块。


1

发生这种情况的原因之一是因为您选择的尺寸类别与您的约束不兼容(这wAny hAny是常见的情况)。在这种情况下,只需在Interface Builder中选择一个不同的大小类即可。


1

对我而言,如果我将对象设置为对象(而非视图)的新约束而未选中“约束到边距”选项,则会发生这种情况。勾选选项即可解决问题(默认设置)。


1

对我有用的(我不知道为什么)是关闭“使用性状变异”,然后执行清除操作,然后重新打开它们。下一个版本没有警告。

要关闭“使用特征变化”,只需在项目导航器中选择情节提要,然后选择“文件检查器”。

在此处输入图片说明

然后只需取消选择“使用性状变异”,按Shift-CMD K即可执行清除操作,如果要使用它们,请重新打开性状变异。

在此处输入图片说明


我认为这本身不是“正确的”(约束消失了),但是此答案对我很有帮助,因为一旦我摆弄了此开关,然后将更改还原到上一次提交,Xcode就会很好地更新任何旧的/不正确的/已经修复了这种警告。看来Xcode实际上会多次显示旧的,已经解决的警告-重新启动Xcode通常对我没有帮助。切换+恢复到最后一次提交似乎显示了下一个“真实”警告。单击它会自动选择IB中有问题的约束。
强尼

0

由于其他答案,我认为这是一个持久的约束,但是这是由于我之前删除的商品仍然有一个“出口”。要做的是:

  1. 选择您的ViewController
  2. 点击右上角的“插座”图标
  3. 查看您的网点,仔细删除不需要的任何网点

最坏的情况是,您删除所有网点,然后再次将它们连接起来。案例解决了!


0

正如@BadCat的回答中所提到的并得到很好的指导,我遵循了这些步骤,并且我只敢再走一步!

BadCats的最后一步之后要执行的步骤回答:

第1步:

我在“界面生成器”中选择了约束,然后牢记它的作用,然后将其删除。

第2步

生成XCode项目,它将显示警告数量可能增加。那是因为您删除了一个需要良好编译的约束。因此,请转到第三步!

第三步

重新添加您要牢记的约束(已删除的约束)。然后重新构建它!

对我来说,警告只是通过这样做而消失了!我想这将对某些人有效!

原因:

据我所知,引起此警告的问题是,我有一个Label连接到IBOutlet,但其名称以大写字母开头。因此,我在ViewController中用一个简单的字母将其重命名,然后在IB中对其进行了更改。我删除了过去的IBOutlet,然后将其连接到新重命名的属性名称并进行了连接。然后我注意到有新警告发出。

首先,我也在该线程中尝试了以下答案,但没有帮助!

干杯!


0

我的情况是选择标签,然后单击Control + X,它将被禁用,但是我对此不做任何事情。构建时,它将显示警告。解决方案:删除标签或删除标签的选定控件+X。


0

我删除了所有这些UI元素(包括其约束),然后再次添加它们,这些警告消失了。无论如何,这是解决这个问题的最糟糕但有用的方法。


0

我在堆栈视图上遇到了问题。删除约束并重新添加约束无济于事。清洁和重建无济于事。

对我来说,解决方案是创建一个全新的堆栈视图对象。

然后将所有元素从旧堆栈视图移到新堆栈视图。

删除旧的堆栈视图可解决此问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.