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

153

此警告出现在Xcode 6.1中。有没有人知道这个警告的含义以及它会带来什么影响?非常感谢!

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

输入图像描述

如何找到导致警告的约束条件?Xcode不会告诉你哪个约束条件有问题。

输入图像描述


@wumm 是的,这个应用程序可以成功构建和运行,我只是担心可能会出现一些问题,但我还没有遇到过。 - Zhihao Yang
8
请注意,通常情况下,此问题是由以下原因引起的:您有一个未安装的项目,但它仍有已安装的限制条件。通常情况下,找到未安装的项目,并标记所有约束条件为未安装状态。 - Fattie
@Fattie请使用此主要原因编辑被接受的答案。谢谢。 - Milan Kamilya
14个回答

440

这个警告可能会让人感到烦恼,它是在Xcode 6.1.1版本之后出现的。主要问题是你无法通过单击警告来轻松找到引用的约束条件。我猜这是一个错误,迟早会得到修复。

然而,在此期间,您可以使用这个小技巧:

步骤1:检测烦人的警告

Annoying warning

步骤 2:右键或 Ctrl- 点击警告,选择 在日志中显示

enter image description here

第三步:欣赏以下日志片段的美:

... 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 ...

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

interesting

第四步:让我们把它扔进项目搜索栏...

search

没错,你猜对了。点击它。

步骤五:MG!在苹果修复这个烦人的错误之前,享受一些额外的生产力时间。

wheeee


对于2016年...

  • 如果您无法通过“在日志中显示”获得它,请显示报告导航器(即最左侧列的最右侧选项卡)。在那里深入了解构建结果。这将显示构建日志,包括约束ID。感谢buildsucceeded提供支持。

enter image description here

enter image description here

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

  • 请注意,令人困惑的是,同样的错误可能是由与之无关的问题引起的(这似乎是Apple的一个漏洞或错误语言的使用):如果您有IBInspectable 的项,并且碰巧在Swift文件中将其重命名。 Xcode不会为您删除旧名称的UserDefinedRuntimeAttributes。只需单击 "Identity Inspector"(右侧面板上的项目3)并删除虚假的项目即可。

对于2017年...

  • 另一个常见但确实更简单的问题是:如果您偶然卸载了某个项目:截至撰写本文,非常简单的Xcode 不知道自动卸载导致该项目的任何约束条件。 简单地查看所有未安装的项目,对于其所有约束条件,只需将它们标记为未安装即可。 (或者仅仅是暂时删除未安装的项目,以查看是否存在问题。)

31
那个解释太棒了,谢谢! - thomasmalt
7
本周我最喜欢的答案 :) 而且非常有用。谢谢! - 5hrp
5
我认为从现在开始,在回答中应该要求包含表情符号。 - James Webster
3
如果我的情况下“在日志中显示”选项变为灰色,该怎么办? - Lightsout
6
我的“右键->显示日志”功能无法正常使用,所以我打开了这个链接作为参考:https://dev59.com/fmMk5IYBdhLWcg3wvAVo。请你将其翻译成中文。 - jordanlgraves
显示剩余11条评论

42

当您在故事板中停用一个视图但未停用该视图的约束时,会触发此消息。

例如,您停用了一个按钮,但仍有一些与该按钮相关联的约束。它可能是内在约束(如高度或宽度)或相对约束(如与另一个视图的距离)。

您必须关闭涉及该视图的每个约束,并且必须手动完成。这里的Xcode非常谨慎,不会替您完成这项工作。


4
谢谢您的回复!您能否更具体地说明什么是“deactive a view”?它是否是删除视图(如按钮)?但是,由于我已经将其删除,约束可能也被删除并且无法找到了?更详细地说,如何“关闭约束”,只需选择并删除它吗?非常感谢! - Zhihao Yang
2
如果在Interface Builder中,一个视图没有被标记为当前尺寸类别的“已安装”,那么它就被停用了。 - DivideByZer0
我在我的故事板中有许多ViewControllers。我怎么知道哪一个有未安装的子视图? - jobima
您可以右键单击警告,然后选择“源代码”选项。在那里,您应该清楚地看到相应视图在相应视图控制器中的层次结构。 - ZaEeM ZaFaR

15

这个解决方法对我有效。

因为我从开发在Xcode 5中的项目中复制了多个项到Xcode 6中,而Xcode 6中的storyboard支持多个布局,因此对于每个约束,我需要将其安装在当前配置中。

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

进入图像描述

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


1
请注意,您的视图对象属性中还有那些讨厌的“已安装”复选框。因此,请确保您认为正在显示的视图对象已选中正确的复选框。警告提示您某些对象未在“当前配置”中显示。 - Matt
这个方法对我也有用。XCode显示我有12或13个警告,但是查看其中一个的日志后发现至少有100个警告。所以我逐个检查它们,为每个限制添加wChR,然后取消选择“已安装”的通用选项。警告消失了! - Andreas
哦,忘了提一下。我意识到在进行这个过程的中途,你实际上可以通过同时选择它们来为几个约束条件执行此过程。 - Andreas

8

我想补充一下这个错误发生的情况:在我的情况下,我想用“Cmd+Backspace”删除一个文本框。我直接在Scene-Builder Tree-View中进行了操作:

enter image description here

你可以看到snooze Field是灰色的。

所以这对我来说很容易发现。你可以通过选择以下内容来真正删除该字段:

从菜单中选择Edit-Delete

出乎意料的是,这确实删除了字段(包括约束)。也许这能帮助有人轻松找到这个令人恼火的警告的原因...


这并没有真正回答问题。如果你有不同的问题,可以通过点击提问来提出。一旦你拥有足够的声望,你也可以添加赏金来吸引更多的关注。- 来自审核 - Martin Evans
3
以下是对所提出问题的另一种修正方式。我只是想添加这个以帮助其他人... - Dirk
非常感谢,非常有帮助。 - Ahmed Elashker
这个答案缩小了如何找到和解决问题的范围。它对我有用! - Lance Samaria

6

详细解释

其他答案没有问题。我只是想引起注意,原始警告中的措辞以及可以显示在工作流程中的一些用例。

constraint-warning

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

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

uninstalled-control

推荐的解决方案:

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

两种修复方法

文档大纲

可视化地,在故事板中打开文档大纲,并查找引用您控件/视图的灰色约束,这些控件/视图位于主视图之外(扩展大纲,单击约束,查看属性检查器,向下移动以快速查看)。然后从此上下文(大小类)中删除该约束。例如,在我的情况下,我只是保留控件,直到稍后决定在哪里显示它,因此我选择完全删除有问题的约束,直到稍后再处理。但在大小类中,我会使用属性检查器中的“已安装”复选框来卸载当前上下文中的约束。

日志导航器/查找工具

也可以继续使用日志导航器通过故事板上给每个对象分配的唯一标识符找到有问题的控件。在日志中,它将出现在黄色突出显示的文本之前,通常采用如我上面示例所示的形式:jvj-mY-DHf

使用标识符,可以使用Xcode中的查找工具定位并删除(完全)或卸载(对于当前上下文)有问题的约束。

log-navigator

如果您喜欢Xml及其简洁性,您还可以打开Storyboad源代码,找到有问题的唯一标识符,并删除适当的xml块。


1
我的解决方法(我不知道为什么有效)是关闭“使用特征变化”,然后执行清理操作,再将其打开。下一次构建没有警告。
要关闭“使用特征变化”,只需在项目导航器中选择您的故事板,然后选择文件检查器即可。

enter image description here

然后只需取消选择“使用特质变化”,按Shift-CMD K进行清理,如果想要使用它们,则重新启用特质变化。

enter image description here


我并不认为这是“正确”的(约束消失),但是这个答案对我很有帮助,因为一旦我调整了这个开关,然后恢复到上一个提交,Xcode会很好地更新任何旧的/不正确的/已经修复的这种警告。似乎Xcode实际上经常会显示旧的、已经修复的警告——通常重新启动Xcode对我没有帮助。翻转那个开关+恢复到上一个提交似乎会显示下一个这种“真正”的警告;点击它会自动选择IB中的有问题的约束。 - Jonny

1
对我来说,如果我给一个对象设置一个新的约束而不勾选“与边距约束”选项,则会发生这种情况(不是视图)。勾选该选项(默认)即可解决问题。

1
这种情况发生的原因之一是您选择了与约束不兼容的大小类(wAny hAny 是常见情况)。在这种情况下,只需在 Interface Builder 中选择不同的大小类即可解决问题。

0

我以为这是由于其他答案而持续存在的限制,但实际上是因为我之前删除的一个“插座”仍然存在。解决方法如下:

  1. 选择您的 ViewController
  2. 单击右上角的“插座”图标
  3. 浏览您的插座并仔细删除任何不需要的插座

最坏的情况是您删除所有插座,然后再次连接它们。问题解决!


0

@BadCat's answer所述并得到很好的指导, 我按照步骤进行了操作,只敢再走一步!

在BadCats答案的最后一步之后执行以下步骤:

第一步:

我在界面构建器中选择了约束条件,然后记住它是什么,然后将其删除。

第二步:

构建XCode项目,它会显示可能增加的警告数量。这是因为您已删除需要编译的约束条件。所以,进入第三步!

第三步:

重新添加您记住的约束条件(您删除的那个)。 然后再次构建它!

对于我来说,只需这样做就可以消除警告! 我想这对某些人也有效!

原因:

据我所理解,导致这个警告的问题是,我有一个与IBOutlet连接的标签,但它的名称以大写字母开头。因此,我在ViewController中将其重命名为一个简单的字母,并在IB中进行更改。我删除了过去的IBOutlet,然后去连接它到新命名的属性名称并连接。然后我注意到出现了一个新的警告。

首先,我在这个线程中也尝试了answer,但没有帮助!

干杯!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接