Xcode 8.约束引用在当前配置中关闭的项目

时间:2016-10-15 09:35:52

标签: ios xcode storyboard constraints xcode8

我在更新到Xcode 8后遇到了问题。每次从主故事板中删除UI对象后,我都会收到以下警告:

  

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

enter image description here

看起来这是一个Xcode错误,但无论如何我想从项目中删除这些警告。我发现Xcode 6 here存在同样的问题,但该问题的答案没有解决问题。因此,当我在故事板中找到不正确的约束并删除它时,不正确约束的数量会增加而不是减少。我曾尝试过的事情:

  • 清理项目
  • 清除了派生数据
  • 删除所有约束并从头开始添加新约束

有什么想法吗?

9 个答案:

答案 0 :(得分:20)

我有几个不是Installed的视图,在更新到xcode 8.1之后,我有2个警告。

以下步骤对我有用:

1)清理项目并重新启动Xcode,警告减少到1。

2)选择警告将准确显示哪个约束存在问题。打开Attributes Inspector并选择应用约束的视图,如果在视图上未选中Installed,则查找Installed。您可以选择在视图上安装,或取消选择在约束本身上安装

见下面的截图。 10 Dim storyboard__1 As New Storyboard() 20 Dim duration As New TimeSpan(0, 0, 1) 30 Dim animation As New DoubleAnimation() 50 animation.From = 0.0 60 animation.[To] = 1.0 70 animation.Duration = New Duration(duration) 90 Storyboard.SetTargetName(animation, "C:\Users\someone\Downloads\cabd.jpg") 100 Storyboard.SetTargetProperty(animation, New PropertyPath(Control.OpacityProperty)) 110 storyboard__1.Children.Add(animation) 120 storyboard__1.Begin(Me.Background) 在视图中未选中,而不是警告指向的约束:)

Installed is unchecked on a view, not on constraint itself

更新:同样的问题再次与另一个ViewController,UIView没有安装大小类,我取消选择安装约束本身和警告也消失了,我猜它不是Xcode错误,它声称打开/关闭安装在UIView和Constrarint

答案 1 :(得分:10)

简短回答:通过搜索“id =” theIdFromWarning“,检查警告中每个ID的故事板的源代码。 id用于约束。当您找到约束ID时,它将引用两个元素ID。通过搜索'id =“ theIdForElement ”搜索元素然后,您将在该元素源代码中找到名称或某些信息,以找出您正在查看的元素。然后将故事板从源代码切换回界面构建器,找到两个元素,并查看相关约束安装的大小类,但元素不是。示例:ViewA.right可以水平约束到ViewB.left,安装在所有大小的类上,但ViewA可能只安装在height = Regular size class上。解决方案:在所有大小的类上安装ViewA,或者卸载所有大小类的约束,并将约束添加到height = Regular size class。

更长的答案,一步一步:

我无法轻易看到这些警告所指的约束/元素。对我来说,我能够右键单击警告,然后选择“在日志中显示”。这显示了这种格式的10个警告:

/my/filepath/to/storyboard:1xe-xx-Bx5: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.

如果您的日志没有显示这样的详细说明,请右键单击对Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.警告的任何日志引用,然后选择Expand all transcripts,然后在日志文件中搜索约束说明。< / p>

所以,我打开了我的故事板,在项目导航器中右键单击了storyboard文件,并选择了“视图作为源代码”,通过列出的id搜索每个约束(在上面的示例中,我搜索了id: 1xe-xx-Bx5 ),并找到一个引用:

<constraint firstItem="Mwb-6O-DKs" firstAttribute="top" secondItem="y2M-Sk-Ygh" secondAttribute="bottom" constant="19" id="1ce-xx-Bx5"/>

这告诉我的是:

  • 约束的ID为 1ce-xx-Bx5
  • 约束与两个元素相关联:
  • 其中一个人的身份 Mwb-6O-DKs
  • 另一个的ID为 y2M-Sk-Ygh

所以我通过id搜索了第一个元素的源代码,通过搜索id="Mwb-6O-DKs"找到了这个:

<label ...(truncating for readability sake)...text="Build Label"...(truncating for readability sake)...id="Mwb-6O-DKs">

这告诉我第一个元素是UILabel,标题为“Build Label”。

按ID id="y2M-Sk-Ygh"搜索第二个元素,显示:

<viewController storyboardIdentifier="login"...(truncating for readability sake)...<layoutGuides><viewControllerLayoutGuide type="top" id="y2M-Sk-Ygh"/>

所以我认为这意味着带有“Build Label”文本的UILabel有一个关闭的顶部约束。 (因为viewControllerLayoutGuide约束永远不应该被关闭,它必须是UILabel

瞧,它没有安装。我选择了UILabel的Installed复选框,错误消失了。

1下来,还有9个去! (F * ing Xcode ......)

答案 2 :(得分:4)

显示Report Navigator [这是最左侧列中最右侧的标签]。这将显示带有约束ID的构建日志。有关详细信息,请查看此stackoverflow's post

答案 3 :(得分:1)

我有一个视图,我已经卸载,所以警告出现了。重新安装视图后,即使清洁后警告也没有消失。但重新启动Xcode后警告就消失了。

答案 4 :(得分:1)

<强>原因

您有一个未安装的项目(即视图),但它仍然存在约束。(由fattie评论)

如何找出具体约束

很难找到导致此警告的精确约束。它在BastiBen's answer中逐步提到了如何找出具体的约束条件。

<强>解决方案

  • 检查特定约束的项目/视图(第一个和第二个)是否对任何特定大小类都是un-Install。在我的情况下,为所有大小类安装了约束,但是为&#34; wC hR&#34;安装了一个项目。 (参见下图)。 enter image description here
  • 安装项目以解决警告。
  • 现在,构建应用程序,如果您仍然发现该特定接口/ XIB文件的相同警告,请不要担心此时其他一些约束存在同样的问题。

对未来的建议

  • 请在从其他界面复制/粘贴视图时检查视图是否正确安装。

答案 5 :(得分:1)

您还可以通过查看情节提要源中的标记来查找视图或约束。

  1. 打开故事板作为来源
  2. 查找以下标记以获取ID
  3. 在故事板中查找id以查找它是哪个项目。

答案 6 :(得分:0)

解决方案只是删除已卸载的视图。就这么简单。

答案 7 :(得分:0)

要解决此问题,有几种选择:

首先是什么原因引起的问题? 卸载视图而不卸载约束。

第二,为什么你要这么做? 您可能希望将视图保留在视图控制器中,因为您先构建了该视图,然后更改了规格,所以您想暂时删除它,因为该部分可能不包括在当前的sprint中或您拥有什么

最后一个是如何解决的?

共有三个选项:

  1. 如果您可以重新安装视图

  2. 如果要保留视图

  3. 如果您可以一起删除全部卸载的视图

选项1

如果您可以重新安装视图:

  1. 通过在图1中淡出的任何视图上切换图2中所示的已安装选件来重新安装视图

  2. 尝试清理项目(Command + Shift + K)-如果不起作用,请尝试重新启动xCode。如果这不起作用,则可能是您错过了某处未安装的视图。

选项2

如果要保留视图:

  1. 在视图控制器系统中查找淡出的每个视图(这意味着它已被卸载)

1 enter image description here 2 enter image description here

  1. 查看与视图相关的约束

3 enter image description here

  1. 取消选中“已安装”

现在,约束也将淡出(不是约束组),如第一张图片所示。

  1. 尝试清理项目(Command + Shift + K)-如果不起作用,请尝试重新启动xCode。如果那不起作用,则可能是您错过了某个地方的约束。

选项3

如果您可以一起删除全部卸载的视图

  1. 删除所有已卸载的视图,这些视图将自动删除其约束

  2. 清理项目(Command + Shift + K),如果不起作用,请尝试重新启动xCode。

答案 8 :(得分:0)

基本上,请确保您“卸载”“卸载”的视图/按钮/等的所有约束。

相关问题