约束两个视图以用视觉格式填充屏幕时忽略第二个视图的大小
Second view's size is ignored when constraining two views to fill the screen with visual format
我正在尝试设置一个约束,使两个视图的宽度应填满屏幕。如果我改变一个视图的宽度,另一个视图应该相应地改变:
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[view1]-8-[view2]-8-|" options:0 metrics:nil views:views]];
我认为这很简单,但是代码似乎忽略了 view2
的大小。 view1
一直获取整个屏幕的宽度,设置view2
的frame不影响view1
的宽度。
我错过了什么?
也为 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
的大小,您不能在使用自动布局时直接设置视图的框架。该值将在下一个布局过程中被覆盖。您应该为视图创建一个明确的宽度约束:
[NSLayoutConstraint constraintWithItem:view2
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:120];
然后在需要更改视图大小时调整该约束的常量。
我正在尝试设置一个约束,使两个视图的宽度应填满屏幕。如果我改变一个视图的宽度,另一个视图应该相应地改变:
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[view1]-8-[view2]-8-|" options:0 metrics:nil views:views]];
我认为这很简单,但是代码似乎忽略了 view2
的大小。 view1
一直获取整个屏幕的宽度,设置view2
的frame不影响view1
的宽度。
我错过了什么?
也为 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
的大小,您不能在使用自动布局时直接设置视图的框架。该值将在下一个布局过程中被覆盖。您应该为视图创建一个明确的宽度约束:
[NSLayoutConstraint constraintWithItem:view2
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:120];
然后在需要更改视图大小时调整该约束的常量。