【发布时间】:2015-02-23 16:28:38
【问题描述】:
我在界面构建器中为特定视图禁用了自动布局:
但是当我为 xib 文件加载 ViewController 时,我在控制台中收到此错误:
无法同时满足约束。
可能至少以下列表中的一个约束是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的; (2) 找到添加了一个或多个不需要的约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档)
我在此视图中使用框架,当我在 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]>
如果我错了,请纠正我,但我只认为如果启用了自动布局,我会收到此错误?
对我来说,它似乎认为我在UIView 和UITableView 之间设置了一个约束,但我没有!自动布局在 Interface Builder 中被禁用,我没有在代码中设置任何约束。
我已尝试将translatesAutoresizingMaskIntoConstraints 设置为NO,但这样做时我的框架不受尊重。
在我看来,视图正在使用自动布局。我曾尝试删除该文件并重新构建它,但仍然出现相同的错误。
为什么在 xib 文件中禁用自动布局时会出现此错误?
编辑:
原来我在搜索约束时犯了一个错误。我在我的代码中找到了这一行:
NSDictionary* views = @{@"searchHeaderView": self.searchHeader.view, @"tableView": self.tableView};
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[searchHeaderView]-(==0)-[tableView]" options:0 metrics:nil views:views]];
我认为这解释了它:-P
【问题讨论】:
-
如果视图层次结构中的 any 视图有约束,则启用自动布局。如果启用了自动布局,XIB 中的 springs'n'struts 将转换为约束(
NSAutoresizingMaskLayoutConstraint类型)。 -
另外,我怀疑调试器控制台中有更多输出。如果有,请编辑您的问题以包含所有内容。
标签: ios objective-c xcode autolayout