我已经阅读了与此类似的所有SO问题,而我已经迷失了。我收到以下错误:
2015-09-14 22:59:40.455 guess-who[60143:9602686] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7c0f8e30 UIImageView:0x7b6efb60.top == _UILayoutGuide:0x7c0f67a0.top>",
"<_UILayoutSupportConstraint:0x7c0f8ae0 V:[_UILayoutGuide:0x7c0f67a0(0)]>",
"<_UILayoutSupportConstraint:0x7c0f0070 _UILayoutGuide:0x7c0f67a0.bottom == UIView:0x7c0f65e0.bottom>",
"<NSAutoresizingMaskLayoutConstraint:0x7b6f6130 h=--& v=--& UIImageView:0x7b6efb60.midY == + 204>",
"<NSAutoresizingMaskLayoutConstraint:0x7b6f6160 h=--& v=--& V:[UIImageView:0x7b6efb60(220)]>",
"<NSLayoutConstraint:0x7b6f6dc0 'UIView-Encapsulated-Layout-Height' V:[UIView:0x7c0f65e0(518)]>",
"<NSAutoresizingMaskLayoutConstraint:0x7b6f6e20 h=-&- v=-&- 'UIView-Encapsulated-Layout-Top' V:|-(0)-[UIView:0x7c0f65e0] (Names: '|':UIView:0x7c0effc0 )>"
)
Will attempt to recover by breaking constraint
<_UILayoutSupportConstraint:0x7c0f0070 _UILayoutGuide:0x7c0f67a0.bottom == UIView:0x7c0f65e0.bottom>
我已经解决了一些我已经成功解决的其他限制因素,但是这个限制让我感到难过。我不知道UILayoutSupportConstraint
是什么;文档不是很彻底。我查看了调试器,UIView:0x7c0f65e0
似乎引用了我的主视图(虽然它出于某种原因是空白视图的孩子?)。我找不到任何带有0x7c0f67a0的东西,虽然这似乎是指布局指南,说它们的底部必须相等。我不确定可以使用哪些其他工具来解决这个问题。
编辑:
使用View Debugger,我把它缩小到这两个约束中的一个,我不知道它们的来源:
我无法找到其中任何一个设置的位置。我知道每个人的第一个建议是将translatesAutoresizingMaskIntoConstraints设置为false,但这会破坏我的整个布局,我不知道如何解决它。
答案 0 :(得分:9)
您还可以考虑在视图中添加辅助功能标识符和约束标识符,以使AL日志更加清晰:
constraintVariableName.identifier = “constraintVariableName”;
在InterfaceBuilder中,使用检查器中的identifier属性。
self.loginButton.accessibilityLabel = NSLocalizedString("LoginButtonAccessibilityLabel", @"");
这些id将最终出现在日志中,例如您在上面发布的内容,用UID替换UIView,UIImageView和UIConstraint等内容。
答案 1 :(得分:3)
似乎你已经对与Superview相关的图像视图给出了限制。因此,为了满足您对UILayoutGuide.bottom的约束,您的约束会被破坏。正如您已经添加了更多或不必要的约束,这些都不是必需的。
正在破坏的限制:
尝试使用高度(220),UIView高度(518)更改 1000到750 的优先级为 1000 。
您还需要检查底部约束
"<NSAutoresizingMaskLayoutConstraint:0x7b6f6e20 h=-&- v=-&- 'UIView-Encapsulated-Layout-Top' V:|-(0)-[UIView:0x7c0f65e0] (Names: '|':UIView:0x7c0effc0 )>"
如果有可能,请在git上附加demo以获得更好的想法。
希望它有所帮助。
答案 2 :(得分:2)
禁用translatesAutoresizingMaskIntoConstraints会破坏您的布局,因为您的某些堆叠元素没有明确的高度/宽度设置(PlayAgain,cat,frame),并且基于图像内容。
您的示例项目无法开箱即用,因此我无法检查运行时布局。但是,我首先指定这些元素的高度,以便减少自动约束。它看起来像你在运行时改变了很多约束,所以你需要谨慎地改变相互冲突的约束。在开始约束 - 常量摆弄之前,确保布局很开心!
答案 3 :(得分:-4)
使用以下行。它可能对你有帮助。
[view setTranslatesAutoresizingMaskIntoConstraints:NO];