我正在尝试设置一个约束,使两个 View 的宽度应填满屏幕。如果我改变一个 View 的宽度,另一个 View 应该相应地改变:
[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
的大小,当你使用自动布局时你不能直接设置 View 的框架。该值将在下一个布局过程中被覆盖。您应该为 View 创建一个明确的宽度约束:
[NSLayoutConstraint constraintWithItem:view2
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:120];
然后在需要更改 View 大小时调整该约束的常量。
关于ios - 约束两个 View 以用视觉格式填充屏幕时忽略第二个 View 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33931725/