Objective c 使用自动布局获取错误,但在模拟器中看起来不错

Objective c 使用自动布局获取错误,但在模拟器中看起来不错,objective-c,xcode,nslayoutconstraint,autolayout,Objective C,Xcode,Nslayoutconstraint,Autolayout,当iPhone的方向改变时,我试图改变UIView的位置。当iPhone处于纵向模式时,我希望容器视图位于表视图之上。在横向模式下,它们应该并排放置(容器视图:左;表格视图:右)。我想使用自动布局执行此操作 下面是我如何设置它的一张图片:(图片是在:w Any h Compact中拍摄的。) 在模拟器中,一切都按预期工作。但是当iPhone的方向改变时,我得到以下错误: Unable to simultaneously satisfy constraints. Probably at

当iPhone的方向改变时,我试图改变UIView的位置。当iPhone处于纵向模式时,我希望
容器视图
位于
表视图
之上。在横向模式下,它们应该并排放置(
容器视图
:左;
表格视图
:右)。我想使用
自动布局
执行此操作

下面是我如何设置它的一张图片:(图片是在:w Any h Compact中拍摄的。)

在模拟器中,一切都按预期工作。但是当iPhone的方向改变时,我得到以下错误:

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:0x7f83f254b7d0 V:[UIView:0x7f83f2564230(272)]>",
    "<NSLayoutConstraint:0x7f83f251d9f0 V:[_UILayoutGuide:0x7f83f250c270]-(0)-[UIView:0x7f83f2564230]>",
    "<NSLayoutConstraint:0x7f83f244bd00 UITableView:0x7f83f28c8e00.bottom == _UILayoutGuide:0x7f83f252f700.top>",
    "<NSLayoutConstraint:0x7f83f244bd50 V:[UIView:0x7f83f2564230]-(0)-[UITableView:0x7f83f28c8e00]>",
    "<_UILayoutSupportConstraint:0x7f83f254b880 V:[_UILayoutGuide:0x7f83f250c270(64)]>",
    "<_UILayoutSupportConstraint:0x7f83f24e4aa0 V:|-(0)-[_UILayoutGuide:0x7f83f250c270]   (Names: '|':UIView:0x7f83f2567df0 )>",
    "<_UILayoutSupportConstraint:0x7f83f251d8e0 V:[_UILayoutGuide:0x7f83f252f700(49)]>",
    "<_UILayoutSupportConstraint:0x7f83f2564300 _UILayoutGuide:0x7f83f252f700.bottom == UIView:0x7f83f2567df0.bottom>",
    "<NSLayoutConstraint:0x7f83f257dec0 'UIView-Encapsulated-Layout-Height' V:[UIView:0x7f83f2567df0(375)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7f83f254b7d0 V:[UIView:0x7f83f2564230(272)]>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
无法同时满足约束。
可能下面列表中至少有一个约束是您不想要的。试着这样做:(1)看看每个约束,试着找出你不期望的约束;(2) 找到添加了不需要的约束的代码,然后修复它。(注意:如果您看到不理解的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性TranslatesAutoResizingMaskToConstraints的文档)
(
"",
"",
"",
"",
"",
"",
"",
"",
""
)
将尝试通过打破约束进行恢复
在UIViewAlertForUnsatifiableConstraints处创建一个符号断点,以便在调试器中捕获该断点。
中列出的UIView上UIConstraintBasedLayoutDebugging类别中的方法也可能会有所帮助。

这个错误可能很简单,但我不明白。(同样,在模拟器中,一切看起来都很正常。)

错误只是意味着您有太多的约束,其中一些约束相互冲突(无法实现)。系统自动忽略其中一个碰撞约束(特别是表示UIView为height 272的约束)。即使它对你很好,你也应该努力修复它


问题很可能是您的距离约束跨越了屏幕的整个高度,因此所有内容都从上到下进行约束,但是您也有定义高度的约束,具体的数字使得这两个约束都无法满足。

该错误只是意味着您有太多的约束,其中一些冲突(不可能实现)。系统自动忽略其中一个碰撞约束(特别是表示UIView为height 272的约束)。即使它对你很好,你也应该努力修复它

问题可能是,您的距离约束跨越了屏幕的整个高度,因此所有内容都从上到下受到约束,但您也有定义高度的约束,具体数字使得这两个约束都无法实现

图像采用:w任意h紧凑型

但问题是,当你切换到另一个方向时,你不在w:Any h:Compact中。所以在那一刻,一些灰色的约束突然出现了!它们是基于尺寸类别(即方向)的条件约束

那么,您看到屏幕截图顶部的灰显约束,将容器视图高度设置为272?这就是问题所在!旋转方向时,该约束将生效,并导致冲突。因此,切换到容器视图高度约束未灰显的任何大小类,并考虑该约束集

图像采用:w任意h紧凑型

但问题是,当你切换到另一个方向时,你不在w:Any h:Compact中。所以在那一刻,一些灰色的约束突然出现了!它们是基于尺寸类别(即方向)的条件约束


那么,您看到屏幕截图顶部的灰显约束,将容器视图高度设置为272?这就是问题所在!旋转方向时,该约束将生效,并导致冲突。因此,切换到容器视图高度约束未灰显的任何大小类,并考虑该约束集。

解释得很好。解释得很好。感谢您的回答!!如果在
w Any h Compact
中消失,为什么会出现问题?此外,我需要容器视图高度为272在该视图中。我能做些什么来修复它?它只在出现问题时才会产生问题。当它发生时,正如Will M.告诉你的那样:你的约束被过度确定,不能同时满足所有的约束。正如他假设的,你可能有一个顶部约束,一个底部约束和高度约束,这是错误的。谢谢你的回答!!如果在
w Any h Compact
中消失,为什么会出现问题?此外,我需要容器视图高度为272在该视图中。我能做些什么来修复它?它只在出现问题时才会产生问题。当它发生时,正如Will M.告诉你的那样:你的约束被过度确定,不能同时满足所有的约束。正如他所假设的,你可能有一个顶部约束,一个底部约束和高度约束,这是错误的。