我有以下设置:
- 大小为 (40,40) 的 UIView
- 此视图的 3 个子视图,每个子视图都有框架 (0,0,40,40)
现在,我希望此设置始终保持以下约束:
H:|-10-[v1]-10-[v2]-10-[v3]-10-|
这意味着在 superview 的整个生命周期中需要以下行为:
- 设置约束后,视图应立即自动布局,如上所示。
- 由于 superview 本身只有 (40,40),它应该自动调整大小以使布局成为可能。
- 从那里开始,更改任何子视图的宽度应该再次布局视图,以便它们仍然坚持布局格式。
到目前为止,我的方法是这样的:
- (id)init
{
self = [super initWithFrame:CGRectMake(0, 0, 40, 40)];
if (self) {
self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.v1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
self.v2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
self.v3 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
[self addSubview:self.v1];
[self addSubview:self.v2];
[self addSubview:self.v3];
NSDictionary *views = @{@"v1" : self.v1, @"v2" : self.v2, @"v3" : self.v3};
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[v1]-10-[v2]-10-[v3]-10-|" options:0 metrics:@{@"10":@10} views:views]];
[self layoutIfNeeded];
}
}
但我收到了冲突的约束消息:
(
"<NSLayoutConstraint:0xed9f040 H:|-(10)-[UIView:0xed9ad30] (Names: '|':MyView:0xed9a040 )>",
"<NSLayoutConstraint:0xed9f270 H:[UIView:0xed9ad30]-(10)-[UIView:0xed9c370]>",
"<NSAutoresizingMaskLayoutConstraint:0xeda3770 h=&&& v=-&- UIView:0xed9c370.midX == 0.5*MyView:0xed9a040.width>",
"<NSAutoresizingMaskLayoutConstraint:0xeda37a0 h=&&& v=-&- UIView:0xed9c370.width == MyView:0xed9a040.width>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0xed9f270 H:[UIView:0xed9ad30]-(10)-[UIView:0xed9c370]>
我的猜测是它与无法调整大小的超级视图有关。但我总体上对此有些困惑。有谁知道我做错了什么?