Ios &引用;“无法同时满足约束”;禁用自动布局时

Ios &引用;“无法同时满足约束”;禁用自动布局时,ios,objective-c,xcode,autolayout,Ios,Objective C,Xcode,Autolayout,我已在interface builder中禁用特定视图的自动布局: 但是,当我为xib文件加载ViewController时,在控制台中出现了以下错误: 无法同时满足约束 可能下面列表中至少有一个约束是您不想要的。试着这样做:(1)看看每个约束,试着找出你不期望的约束;(2) 找到添加了不需要的约束的代码,然后修复它。(注意:如果您看到不理解的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性TranslatesAutoResizingMaskToC

我已在interface builder中禁用特定视图的自动布局:

但是,当我为xib文件加载ViewController时,在控制台中出现了以下错误:

无法同时满足约束

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

我在这个视图中使用框架,当我在Interface Builder中禁用它时,通常不会出现任何自动布局错误。这就是似乎要打破的限制:

(
    "<NSLayoutConstraint:0x170f5cd0 V:[UIView:0x1709e560]-(0)-[UITableView:0x162e2200]>",
    "<NSAutoresizingMaskLayoutConstraint:0x17185130 h=--& v=--& UIView:0x1709e560.midY == + 48>",
    "<NSAutoresizingMaskLayoutConstraint:0x157e29a0 h=--& v=--& V:[UIView:0x1709e560(96)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x171c2670 h=--& v=--& TableHeaderView:0x1705d1c0.midY == + 72.5>",
    "<NSAutoresizingMaskLayoutConstraint:0x171cb510 h=--& v=--& V:[TableHeaderView:0x1705d1c0(145)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x1573fca0 h=-&- v=-&- UITableView:0x162e2200.midY == UIView:0x17505080.midY + 72.5>",
    "<NSAutoresizingMaskLayoutConstraint:0x1573fcd0 h=-&- v=-&- UITableView:0x162e2200.height == UIView:0x17505080.height - 145>",
    "<NSAutoresizingMaskLayoutConstraint:0x171e4450 h=-&- v=-&- 'UIView-Encapsulated-Layout-Top' V:|-(0)-[UIView:0x17505080]   (Names: '|':UIViewControllerWrapperView:0x17034d00 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x16c9ad30 V:[UIView:0x16cc2a00]-(0)-[UITableView:0x15249400]>

我想这就解释了:-p

我很确定,如果您不想使用自动布局,那么您需要将
翻译自动调整大小GMaskintoConstraints
设置为
而不是


这样可以确保为您创建约束,这些约束反映在interface builder中绘制的位置,而无需添加约束。也许您指定了一些约束,这些约束与它认为需要自动生成的约束冲突?如果你能找到任何约束条件,我会删除任何约束条件。如果没有要删除的内容,你能发布它所说的冲突列表吗?

有些奇怪的事情正在发生,因为如果你仔细观察,“will break”约束和附加到它的视图的内存地址不在数组中,因此这些是不同的实例

无论如何,这种不受欢迎的自动布局行为与您的怀疑是一致的:如果在视图层次结构中添加了一个约束,则至少在该部分中,自动布局会“重新打开”,而您会得到一堆自动重新设置大小的任务约束

所以这是一个调试问题。可以在调试器中使用的一些命令和方法:

po [[UIWindow keyWindow] recursiveDescription]
提供视图层次结构的完整轮廓,以及包含框架的UIView描述

po [[UIWindow keyWindow] _autolayoutTrace]

这是私有API,但在开发过程中,尤其是在调试过程中,这不是问题。如果您按照建议并在UIViewAlertForUnsatifiableConstraints(底部的断点导航器)添加符号断点,这实际上效果最好。祝你好运

它可能是设备/模拟器上的剩余布局资源。我以前有过布局问题,只有卸载应用程序并运行它才能解决。值得一试。如果视图层次结构中的任何视图具有约束,则会启用自动布局。如果启用了自动布局,XIB中的弹簧和支柱将转换为约束(类型为
NSAutoresizingMaskLayoutConstraint
)。此外,我怀疑调试器控制台中还有更多输出。如果有,请编辑您的问题以包含所有内容。谢谢您的帮助。事实证明,我确实自己创建了约束。抱歉:-/但是+1对于
\u autolayoutTrace
@ThomasClemensen,所以我的陈述“这是一个调试问题”是正确的,正如“…行为与您的怀疑一致。如果添加了一个约束…”,并且您说您感谢提到的调试工具之一。看起来你可以把这个标记为已接受。创建自己的答案以接受,只是为了提供准确的代码行添加更多约束——你特别说“我没有!”——对于认真研究你所提供信息的问题的人来说不是很礼貌。我实际上试图删除这个问题,因为我提供了错误的信息,所以没有人能用它做任何事情。当我试图删除它时,StackOverflow告诉我这是一个非常糟糕的主意。但既然你哭了,我就帮你把它修好了。事实上,我认为这是一个不错的问题,而如何确定是什么导致了这个问题(而不是对自动布局的误解)才是答案。我正在努力建立统计数据,所以我很感激你接受了。很多时候,自动布局是一个雷区,祝你好运。
po [[UIWindow keyWindow] _autolayoutTrace]