确定的约束越来越“无法同时满足的约束”
旋转某些视图时的风景,我得到这个日志时:确定的约束越来越“无法同时满足的约束”
无法同时满足的约束。 以下列表中的至少一个约束可能是您不想要的。试试这个:(1)看看每个约束,并试图找出你不期望的; (2)找到添加不需要的约束或约束并修复它的代码。 (注意:如果你看到,你不明白NSAutoresizingMaskLayoutConstraints,请参阅文档UIView的财产translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x17009b3f0 V:[UILabel:0x14c51ed20'Welcome to...'(>=54)]>",
"<NSLayoutConstraint:0x17009b580 V:[MyApp.LogoHeaderView:0x14c51f3e0]-(82)-[UILabel:0x14c51ed20'Welcome to...']>",
"<NSLayoutConstraint:0x17009b2b0 V:[UILabel:0x14c51ed20'Welcome to...']-(30)-[UIView:0x14c51e7e0]>",
"<NSLayoutConstraint:0x170280230 V:[MyApp.LogoHeaderView:0x14c51f3e0]-(0)-[UIView:0x14c51e7e0]>"
)
将尝试打破约束
恢复
<NSLayoutConstraint:0x17009b3f0 V:[UILabel:0x14c51ed20'Welcome to...'(>=54)]>
在UIViewAlertForUnsatisfiableConstraints中创建一个符号断点以在调试器中捕获此断点。 列出的UIView上的UIConstraintBasedLayoutDebugging类中的方法也可能有所帮助。
而我什么都不懂。我添加了象征性的UIViewAlertForUnsatisfiableConstraints
断点,但内存地址告诉我什么都没有......我怎样才能以一种更可靠的方式找到这个日志所讨论的约束条件?
在此先感谢
您可以对约束进行重新排序,以便视图以一致的顺序出现。因此,原文:
<NSLayoutConstraint:0x17009b3f0 V:[UILabel:0x14c51ed20'Welcome to...'(>=54)]>
<NSLayoutConstraint:0x17009b580 V:[MyApp.LogoHeaderView:0x14c51f3e0]-(82)-[UILabel:0x14c51ed20'Welcome to...']>
<NSLayoutConstraint:0x17009b2b0 V:[UILabel:0x14c51ed20'Welcome to...']-(30)-[UIView:0x14c51e7e0]>
<NSLayoutConstraint:0x170280230 V:[MyApp.LogoHeaderView:0x14c51f3e0]-(0)-[UIView:0x14c51e7e0]>
变为:
<NSLayoutConstraint:0x17009b580 V:[MyApp.LogoHeaderView:0x14c51f3e0]-(82)-[UILabel:0x14c51ed20'Welcome to...']>
<NSLayoutConstraint:0x17009b3f0 V:[UILabel:0x14c51ed20'Welcome to...'(>=54)]>
<NSLayoutConstraint:0x17009b2b0 V:[UILabel:0x14c51ed20'Welcome to...']-(30)-[UIView:0x14c51e7e0]>
<NSLayoutConstraint:0x170280230 V:[MyApp.LogoHeaderView:0x14c51f3e0]-(0)-[UIView:0x14c51e7e0]>
所以,你必须垂直,它和标签之间MyApp.LogoHeaderView
有82分的情况下阅读 “欢迎到......”。该标签高于或等于54分高。然后在它和UIView
之间有30分。同时,你已经设置了一个约束条件,表示UIView
和你的MyApp.LogoHeaderView
之间应该没有距离。冲突是一些约束要求在MyApp.LogoHeaderView
和UIView
之间至少有82 + 54 + 30 == 166点,而另一个约束则表示它们之间有0点。
您是否真的有多个地方在您的用户界面中有MyApp.LogoHeaderView
和标签上显示“欢迎来到...”?
当你定义在IB的约束,我觉得这是没有办法获得更多的信息。 但问题是什么?你知道标签和视图。现在你可以看看你对这个观点的限制。 最糟糕的情况是删除所有对象并逐个添加它们,并在每次添加下一个项目时运行应用程序。然后你会发现错误。
http://*.com/questions/25630315/autolayout-unable-to-simultaneously-satisfy-constraints – luk2302
@ luk2302非常感谢 – AppsDev