Ios 获取“时识别约束”;“无法同时满足约束”;

Ios 获取“时识别约束”;“无法同时满足约束”;,ios,autolayout,breakpoints,nslayoutconstraint,Ios,Autolayout,Breakpoints,Nslayoutconstraint,我在将某些视图旋转到横向视图时得到此日志: 无法同时满足约束。 可能下面列表中至少有一个约束是您不想要的。试着这样做:(1)看看每个约束,试着找出你不期望的约束;(2) 找到添加了不需要的约束的代码,然后修复它。(注意:如果您看到不理解的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性TranslatesAutoResizingMaskToConstraints的文档) ( "=54)]>", "", "", "" ) 将尝试通过打破约束进行恢复

我在将某些视图旋转到横向视图时得到此日志:

无法同时满足约束。 可能下面列表中至少有一个约束是您不想要的。试着这样做:(1)看看每个约束,试着找出你不期望的约束;(2) 找到添加了不需要的约束的代码,然后修复它。(注意:如果您看到不理解的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性TranslatesAutoResizingMaskToConstraints的文档)

(
"=54)]>",
"",
"",
""
)

将尝试通过打破约束进行恢复

=54)]>
在UIViewAlertForUnsatifiableConstraints处创建一个符号断点,以便在调试器中捕获该断点。 中列出的UIView上UIConstraintBasedLayoutDebugging类别中的方法也可能会有所帮助

我什么都不懂。我添加了符号
UIViewAlertforUnsatifiableConstraints
断点,但内存地址没有告诉我任何信息。。。我如何才能以更容易理解的方式找到此日志所讨论的约束


提前感谢

当您在IB中定义约束时,我认为无法获得更多信息。 但问题是什么?您知道标签和视图。现在,您可以查看此视图的约束。
在更糟糕的情况下,删除所有对象并逐个添加,每次添加下一项时都运行应用程序。然后您将发现错误。

当您在IB中定义约束时,我认为无法获得更多信息。 但问题是什么?您知道标签和视图。现在,您可以查看此视图的约束。
在更糟糕的情况下,删除所有对象并逐个添加,每次添加下一项时都运行应用程序。然后您将发现错误。

您可以重新排序约束,以便视图以一致的顺序显示。因此,原文:

<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]>
=54)]>
变成:

<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]>

=54)]>
因此,在垂直方向上,您有一个
MyApp.LogoHeaderView
的实例,在它和一个标签之间有82个点,标签上写着“Welcome to…”。该标签的高度大于或等于54点。然后,它与
UIView
之间有30个点。同时,您已经设置了一个约束,说明
UIView
和您的
MyApp.LogoHeaderView
之间不应有距离。冲突在于,一些约束要求
MyApp.LogoHeaderView
UIView
之间至少有82+54+30==166个点,而另一个约束要求它们之间有0个点


您的UI中是否真的有多个位置,其中有一个
MyApp.LogoHeaderView
和一个标签,上面写着“欢迎使用…”?

您可以重新排序约束,以便视图以一致的顺序显示。因此,原文:

<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]>
=54)]>
变成:

<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]>

=54)]>
因此,在垂直方向上,您有一个
MyApp.LogoHeaderView
的实例,在它和一个标签之间有82个点,标签上写着“Welcome to…”。该标签的高度大于或等于54点。然后,它与
UIView
之间有30个点。同时,您已经设置了一个约束,说明
UIView
和您的
MyApp.LogoHeaderView
之间不应有距离。冲突在于,一些约束要求
MyApp.LogoHeaderView
UIView
之间至少有82+54+30==166个点,而另一个约束要求它们之间有0个点


您的UI中是否真的有多个位置,其中有一个
MyApp.LogoHeaderView
和一个标签,上面写着“欢迎使用…”?

@luk2302谢谢much@luk2302非常感谢你的详细解释。我在横向定位时隐藏标签,因此,在隐藏视图时,是否也要删除它们的约束?是的,或者修改约束的
常量
属性,如果这达到了您的要求。隐藏视图仍参与自动布局。(事实上,一些自动布局技术通常涉及隐藏的“间隔”视图,在代码< UILayOutuths>代码>之前介绍。)如果你瞄准IOS 9 +,你应该考虑<代码> uistaCaveV。另一个问题:当设备旋转时,更改约束的正确方法是什么?这就是为什么我会出现“无法同时满足约束”错误…感谢您的详细解释。我在横向定位时隐藏标签,因此,在隐藏视图时,是否也要删除它们的约束?是的,或者修改约束的
常量
属性,如果这达到了您的要求。隐藏视图仍参与自动布局。(事实上,一些自动布局技术通常涉及隐藏的“间隔”视图,在代码< UILayOutuths>代码>之前介绍。)如果你瞄准IOS 9 +,你应该考虑<代码> uistaCaveV。另一个问题:当设备旋转时,更改约束的正确方法是什么?这就是为什么我会出现“无法同时满足约束”错误。。。