1

我正在尝试设置两个视图的宽度应该填满屏幕的约束。如果我改变一个视图的宽度,另一个视图应该相应地改变:

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[view1]-8-[view2]-8-|" options:0 metrics:nil views:views]];

我认为这很简单,但代码似乎忽略了view2. view1不断获取屏幕的整个宽度并设置框架view2不影响view1.

我错过了什么?

4

1 回答 1

2

也分配一个最小尺寸约束view2,否则“0 宽度”将是约束的有效解决方案。

[NSLayoutConstraint activateConstraints:
    [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[view1(>=minSize)]-8-[view2(>=minSize)]-8-|" 
                                            options:0 
                                            metrics:@{@"minSize" : @50} 
                                              views:views]];

另外,不要再使用addConstraints:(iOS 8+)。使用-[NSLayoutConstraint setActive:]+[NSLayoutConstraint activateConstraints:]

至于改变view2's 的大小,你不能在使用 Auto Layout 时直接设置视图的框架。该值将在下一次布局传递中被覆盖。您应该为视图创建显式宽度约束:

[NSLayoutConstraint constraintWithItem:view2
                             attribute:NSLayoutAttributeWidth
                             relatedBy:NSLayoutRelationEqual
                                toItem:nil
                             attribute:NSLayoutAttributeNotAnAttribute
                            multiplier:1.0
                              constant:120];

然后在需要更改视图大小时调整该约束的常量。

于 2015-11-26T06:16:26.587 回答