【问题标题】:Xcode Storyboard warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configurationXcode Storyboard 警告:在当前配置中关闭了约束引用项。在当前配置中关闭此约束
【发布时间】:2014-12-20 06:15:43
【问题描述】:

此警告发生在 Xcode 6.1 中。任何人都知道这个警告是什么意思以及它会发生什么?非常感谢!

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

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

【问题讨论】:

  • @wumm 是的,该应用程序可以成功构建和运行,我只是担心可能会发生一些潜在的问题,我还没有遇到。
  • 请注意,这个问题通常是由以下原因引起的:您有一个未安装的项目,但它有仍然安装的约束。 通常,找到未安装的项目,并针对其所有限制,将它们标记为未安装。
  • @Fattie 请用这个主要原因编辑接受的答案。谢谢

标签: ios xcode cocoa-touch storyboard xcode6


【解决方案1】:

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

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

第 1 步:检测恼人的警告?

第二步:右键/Ctrl-点击警告,选择Reveal in Log?

第3步:欣赏以下日志sn-p的美:

... 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 修复这个恼人的错误之前,享受几分钟的额外工作效率。 ?


2016 年...

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

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

  • 请注意,令人困惑的是,相同的错误可能是由不相关的问题引起的(这似乎是 Apple 错误或错误语言使用不当):如果您有 IBInspectable 项目,并且碰巧重命名 它们在你的 Swift 文件中。 Xcode 不会为您删除旧名称 UserDefinedRuntimeAttributes。只需点击“Identity Inspector”(右侧面板上的项目 3)并删除无效项目。

2017 年...

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

【讨论】:

  • 这个解释太棒了。谢谢!
  • 本周我最喜欢的答案 :) 非常有用。谢谢!
  • 我认为从现在开始,答案中应该需要表情符号。
  • 如果在日志中显示为灰色怎么办?
  • 我的 右键单击 -> 显示日志 什么也没做,所以我使用它作为参考打开日志:stackoverflow.com/questions/19014359/…
【解决方案2】:

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

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

您必须关闭每个引用视图的约束,并且您必须手动完成。 Xcode 在这里过于保守,不会为你做这件事。

【讨论】:

  • 感谢您的回复!您能否更具体地说明什么是“无效视图”?是删除视图(如按钮)吗?但是由于我已经删除了它,约束也可能被删除并且找不到?以及如何更详细地“关闭约束”,只需选择并删除它?非常感谢!
  • 如果视图在 Interface Builder 中没有针对其当前尺寸等级标记为“已安装”,那么它就会被停用。
  • 我的故事板中有很多 ViewController。 ¿我怎么知道哪个有未安装的子视图?
  • 您可以右键单击警告并选择“源代码”选项。在那里,您应该清楚地看到相应视图在受尊重的视图控制器中的层次结构。
【解决方案3】:

这个解决方案对我有用。

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

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

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

【讨论】:

  • 请注意,您的视图对象属性中还有那些讨厌的Installed 复选框。因此,请确保您认为正在显示的视图对象选中了正确的复选框。警告告诉您current configuration 中未显示某些对象。
  • 这对我也有用。 XCode 说我有 12 或 13 个警告,但在日志中查找其中一个显示至少有 100 个。所以我检查了每一个,为每个约束添加一个 wChR,然后取消选中通用的“已安装”。警告消失了!
  • 哦,忘了说。我意识到,您实际上可以通过同时选择多个约束来一次对多个约束执行此过程。
【解决方案4】:

只是想添加我的情况,这个错误是如何发生在我身上的:在我的情况下,我想用“Cmd+Backspace”删除一个文本字段。我直接在 Scene-Builder Tree-View 中执行此操作:

你可以看到贪睡字段是灰色的。

所以这对我来说很容易发现。你可以比简单地真正删除 通过选择字段:

从菜单编辑-删除

令人惊讶的是 - 这确实删除了字段(包括约束)。 也许这有助于某人轻松找到这个烦人的警告的原因......

【讨论】:

  • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
  • 这是解决问题的另一种方法。所以只是想添加这个来帮助别人......
  • 谢谢,很有帮助
  • 这个回答缩小了如何查找和解决问题的范围。它对我有用!
【解决方案5】:

扩展说明

其他答案没有错。我只是想提请注意原始警告中的措辞,并确定一些可能出现在工作流程中的用例。

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

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

连同推荐的解决方案:

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

两种修复方法

文档大纲

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

日志导航器/查找工具

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

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

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

【讨论】:

    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

      对我来说,如果我为对象(不是视图)设置了一个新的约束,并且没有勾选“约束到边距”选项,就会发生这种情况。勾选选项(这是默认选项)解决了问题。

      【讨论】:

        【解决方案8】:

        对我有用(我不知道为什么)是关闭“使用特征变化”,然后执行清理,然后重新打开它们。下一个版本没有警告。

        要关闭“使用特征变化”,只需在项目导航器中选择您的故事板,然后选择文件检查器。

        然后只需取消选择“使用特征变体”,按 Shift-CMD K 执行清理,然后如果要使用特征变体,则重新打开。

        【讨论】:

        • 我不认为这本身是“正确的”(约束消失),但是这个答案对我很有帮助,因为只要我摆弄这个开关,然后将更改恢复到最后一次提交, Xcode 会很好地更新任何旧的/不正确的/已经修复的此类警告。似乎 Xcode 实际上很多时候都会显示旧的、已经修复的警告——通常重新启动 Xcode 对我没有帮助。翻转那个开关+恢复到最后一次提交似乎显示了下一个这种“真正的”警告;点击它会自动选择 IB 中有问题的约束。
        【解决方案9】:

        由于其他答案,我认为这是一个持续的约束,但这是由于我之前删除的项目仍然有一个“出口”。该怎么做:

        1. 选择您的视图控制器
        2. 点击右上角的“插座”图标
        3. 查看您的网点并小心删除任何您不需要的内容

        最坏的情况是您删除所有网点并重新连接它们。破案!

        【讨论】:

          【解决方案10】:

          正如@BadCat's answer 中提到并得到很好的指导, 我顺着台阶走下去,只敢再迈出一步!

          BadCats回答最后一步后的步骤:

          第 1 步:

          我在 Interface Builder 中选择了约束,然后记住它的用途,然后将其删除。

          第 2 步

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

          第 3 步

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

          对我来说,只要这样做,警告就会消失! 我想这对某些人来说会奏效!

          原因:

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

          首先我在这个帖子中也尝试了以下answer,但没有帮助!

          干杯!

          【讨论】:

            【解决方案11】:

            我的情况是选择标签,然后单击 control + X,它将被禁用,但我不做任何事情。当我构建时,它会显示警告。 解决方案:移除标签或移除选中的控件+X作为标签。

            【讨论】:

              【解决方案12】:

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

              【讨论】:

                【解决方案13】:

                我在堆栈视图上遇到了问题。删除约束并重新添加它们没有帮助。清洁和重建没有帮助。

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

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

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

                【讨论】:

                  【解决方案14】:

                  对我来说,问题是“wR”视图类的“已安装”约束,现在需要为所有视图类“安装”:

                  选中一般的“已安装”框并取消选中“wR”的“已安装”框使约束正常工作:

                  但是警告仍然没有清除。事实证明,您必须通过点击左侧的“X”来完全删除“wR”选项才能使警告消失:

                  【讨论】:

                    猜你喜欢
                    • 2017-02-24
                    • 1970-01-01
                    • 2012-11-21
                    • 1970-01-01
                    • 2019-01-02
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-10-18
                    • 2021-12-23
                    相关资源
                    最近更新 更多