调试器中的冲突约束错误消息

时间:2017-07-07 03:49:33

标签: ios xcode constraints

我正在完成在线教程。我一步一步地跟踪了所有内容,并在运行模拟器时在调试器中收到一条消息,说我有相互冲突的约束。我不相信存在相互矛盾的约束,所以我想我会伸出援手来获得明智的第二意见。

以下是具有冲突约束的视图控制器的屏幕截图。

View Controller from Xcode Project

以下是调试器中错误消息的屏幕截图:看起来它在停止按钮上存在宽度约束问题,但我无法从错误消息中告诉如何修复它。

Part of Error Message

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

看起来您设置了停止按钮宽度= 64,但实际上您没有为父视图设置宽度,因此它自动设置为等于0或343。 单击停止按钮时是否有任何红色限制?

答案 1 :(得分:0)

我能找到答案。我必须在停止按钮的宽度约束上将优先级更改为999。调试消息说下面的限制是冲突的。

(
"<NSLayoutConstraint:0x600000096080 UIButton:0x7fb874e157d0.width == 64   (active)>",
"<NSLayoutConstraint:0x610000097ac0 'fittingSizeHTarget' UIStackView:0x7fb874e155d0.width == 0   (active)>",
"<NSLayoutConstraint:0x600000096210 'UISV-canvas-connection' UIStackView:0x7fb874e155d0.leading <= UIButton:0x7fb874e157d0.leading   (active)>",
"<NSLayoutConstraint:0x600000097ca0 'UISV-canvas-connection' UIStackView:0x7fb874e155d0.centerX == UIButton:0x7fb874e157d0.centerX   (active)>"
)

然后它说它需要打破停止按钮的宽度约束以修复冲突的约束问题。

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600000096080 UIButton:0x7fb874e157d0.width == 64   
(active)>

将优先级降低到999会阻止调试消息出现,并保持按钮是我想要的。

我在这里找到了解决方案信息:

https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/DebuggingTricksandTips.html

[来自链接] 在这些约束中,最后一个是由系统创建的。你无法改变它。此外,它与第一个约束产生了明显的冲突。如果你的superview只有320点宽,那么你永远不会有400点宽的标签。幸运的是,您不必摆脱第一个约束。如果将其优先级降至999,系统仍会尝试提供尽可能接近的选定宽度,同时仍满足其他约束条件。