【发布时间】:2013-04-07 23:34:34
【问题描述】:
我的控制器中有以下简单的测试代码:
- (void)loadView
{
UIView *view = [UIView new];
[self setView:view];
UILabel *label = [UILabel new];
[label setText:@"Hello World!"];
[view addSubview:label];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-[label]"
options:0 metrics:nil views:NSDictionaryOfVariableBindings(label)]];
}
代码失败并出现以下异常,我不知道为什么。任何帮助将不胜感激:
2013-04-15 14:15:47.880 libmarkup-test[1072:c07] 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:0x753eb60 H:|-(NSSpace(20))-[UILabel:0x7536b60] (Names: '|':UIView:0x75376a0 )>",
"<NSAutoresizingMaskLayoutConstraint:0x712a2c0 h=--& v=--& UILabel:0x7536b60.midX ==>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x753eb60 H:|-(NSSpace(20))-[UILabel:0x7536b60] (Names: '|':UIView:0x75376a0 )>
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.
“无法同时满足约束”消息特别令人困惑,因为据我所知,我只指定了一个约束。
【问题讨论】:
-
由于某种原因,问题在我写完之前就发布了。
-
Greg:你在哪里设置视图的框架?为什么要使用 setView?你想添加你正在创建的视图作为某个控制器的子视图吗?我不确定我们是否有足够的信息来帮助您。
-
我没有设置视图的框架 - 我将它设置为我的控制器的视图。控制器调整其大小以填满屏幕。此代码正在 loadView 中执行。我在代码示例中添加了更多上下文。
-
顺便说一句,如果我注释掉对 addConstraints:options:metrics:views: 的调用,而是直接设置 UILabel 的框架(例如 [label setFrame:CGRectMake(5, 10, 320, 20) ]),示例按预期工作。
标签: ios autolayout autoresizingmask