仅在切换视图控制器时出现NSLayoutConstraint错误

时间:2015-04-11 15:55:31

标签: ios objective-c uitableview autolayout nslayoutconstraint

我从我的一个视图控制器中得到了一些非常奇怪的行为。

我从不同标签中的两个UITableViews导航到同一个控制器(带有不同的实例)。

当点击UITableViewCell时显示,一切正常,没有错误显示。如果我打开控制器并通过选择另一个选项卡离开它,然后通过按原始选项卡导航回它,我会收到大量NSLayoutConstraint错误。

我的单元格中实际上没有任何约束,并且我在Storyboard中的单元格内容视图中没有任何UI元素,因为我是以编程方式添加所有这些元素。我没有在代码中定义任何约束。

完整错误为here,因为它太大而无法合理地粘贴到SO中。

摘录如下:

2015-04-11 16:49:23.889 TradingPost[6982:60b] 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:0x155e5250 H:[UILabel:0x155d8150(158)]>",
"<NSLayoutConstraint:0x155ed9e0 H:|-(8)-[UILabel:0x155d8150]   (Names: '|':UITableViewCellContentView:0x155d4a80 )>",
"<NSLayoutConstraint:0x155eda30 H:[UILabel:0x155d8150]-(47)-[UIView:0x155e01a0]>",
"<NSLayoutConstraint:0x155f1bc0 UIView:0x155e01a0.trailing == UITableViewCellContentView:0x155d4a80.trailing - 8>",
"<NSAutoresizingMaskLayoutConstraint:0x156b7640 h=--& v=--& H:[UITableViewCellContentView:0x155d4a80(0)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x155e5250 H:[UILabel:0x155d8150(158)]>

Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

补充:经过进一步调查,我发现即使我从控制器中删除了所有UI生成代码以及故事板中的所有约束,我仍然会收到错误。在这一点上,我怀疑巫术。

2 个答案:

答案 0 :(得分:2)

即使您没有明确地创建任何约束,自动布局系统也可以从与每个视图关联的autoresizingMask掩码创建它们。您可以尝试将translatesAutoresizingMaskIntoConstraints设置为NO。但是,如果您使用自动布局和大小类来创建适应各种屏幕大小的界面,那么您可能需要接受约束。在这种情况下,您可能最好在代码中明确设置相关约束。

答案 1 :(得分:0)

我发现另一个视图与我认为造成问题的视图相关联,是问题的真正原因。

所有需要的是重置修复它的约束,当我遇到这个问题时我完全忘了它。