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

Dan*_*nny 21 xcode constraints storyboard ios xcode8

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

约束引用项目在当前配置中关闭.在当前配置中关闭此约束.

在此输入图像描述

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

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

有任何想法吗?

Aam*_*irR 22

Installed在更新到xcode 8.1之后,我有几个视图没有,我有2个警告.

以下步骤对我有用:

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

2)选择警告将准确显示哪个约束存在问题.打开Attributes Inspector并选择应用约束的视图,查看Installed是否在视图上取消选中(不受约束).您可以选择视图上的已安装,也可以取消选择已安装约束本身.

见下面的截图.Installed在视图上未选中,而不是警告指向的约束:)

已取消选中已安装的视图,而不是约束本身

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


jun*_*dev 11

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

更长的答案,一步一步:

我无法轻易看到这些警告所指的约束/元素.对我来说,我能够右键单击警告,然后选择"在日志中显示".这显示了以这种风格格式的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,然后在日志文件中搜索约束描述.

所以,我打开我的故事板,右键单击项目导航器中的故事板文件,并选择"查看为源代码",按列出的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-DK的身份
  • 另一个人的身份是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"/>

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

瞧,它没有安装.我选中了InstalledUILabel 的复选框,错误消失了.

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