是否可以使用可视格式字符串在b
中平均分配@"|-[a(5)]-[b(8)]-[c(5)]-|"
的左右空格?
答案 0 :(得分:15)
Apple的Auto Layout Guide建议使用“spacer views”。以下是横向等间距布置三个视图的解决方案:
// create views dictionary
NSMutableDictionary *viewsDictionary = [NSMutableDictionary dictionary];
[viewsDictionary addEntriesFromDictionary:NSDictionaryOfVariableBindings(viewA, viewB, viewC)];
// create 4 spacer views
for (int i = 0; i < 4; i++) {
UIView *spacerView = [[UIView alloc] init];
spacerView.hidden = YES;
[self addSubview:spacerView];
[viewsDictionary setObject:spacerView
forKey:[NSString stringWithFormat:@"spacer%d", i + 1]];
}
// disable translatesAutoresizingMaskIntoConstraints in views for auto layout
[viewsDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop)
{
[obj setTranslatesAutoresizingMaskIntoConstraints:NO];
}];
// add constraints
[superview addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:
@"|[spacer1(>=0)][viewA][spacer2(==spacer1)][viewB][spacer3(==spacer1)][viewC][spacer4(==spacer1)]|"
options:kNilOptions
metrics:nil
views:viewsDictionary]];
请注意,spacer1
的宽度设置为大于0.后续的间隔视图设置为与spacer1
具有相等的宽度。
答案 1 :(得分:13)
没有。
但是,您可以使用可视格式和手动约束创建来完成此操作。将您的VFL字符串更改为:
@"|-[a(5)]->=0-[b(8)]->=0-[c(5)]-|"
这表示你并不太关心a和b之间以及b和c之间空格的实际大小。
现在,创建一个约束,使用constraintWithItem:...
将b的中心固定到超视图的中心(我在手机上输入这个,所以请原谅我没有拼出整个方法)。
这与灵活的间距相结合,将为b的左侧和右侧提供均匀的空间。