我正在完成在线教程。我一步一步地跟踪了所有内容,并在运行模拟器时在调试器中收到一条消息,说我有相互冲突的约束。我不相信存在相互矛盾的约束,所以我想我会伸出援手来获得明智的第二意见。
以下是具有冲突约束的视图控制器的屏幕截图。
View Controller from Xcode Project
以下是调试器中错误消息的屏幕截图:看起来它在停止按钮上存在宽度约束问题,但我无法从错误消息中告诉如何修复它。
非常感谢任何帮助!
答案 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会阻止调试消息出现,并保持按钮是我想要的。
我在这里找到了解决方案信息:
[来自链接] 在这些约束中,最后一个是由系统创建的。你无法改变它。此外,它与第一个约束产生了明显的冲突。如果你的superview只有320点宽,那么你永远不会有400点宽的标签。幸运的是,您不必摆脱第一个约束。如果将其优先级降至999,系统仍会尝试提供尽可能接近的选定宽度,同时仍满足其他约束条件。