我只是在玩constraintsWithVisualFormat
,但却无法弄明白该怎么做。
我有两个视图放在一起,水平放置10个像素边距。和两个视图的Y位置相同。
我尝试了以下事项。
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[view1(==100)]-10-[view2(==100)]" options:0 metrics:nil views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[view1(==100)]-[view2(==100)]" options:0 metrics:nil views:views]];
水平约束:超视距10像素左边距 - 100宽度 view1-10像素边距 - 100宽度view2
垂直约束:来自superview的10个像素顶部 - 100个视图高度1- 100高度view2
问题 第二个视图Y位置在view1之后开始,我希望两个视图都有相同的Y位置。
请尽可能解释答案
答案 0 :(得分:2)
Mark' - '在VisualFormatLanguage中是8px。
试试这个。
`[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[view1(==100)]-10-[view2(==100)]" options:0 metrics:nil views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[view1(==100)]" options:0 metrics:nil views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[view2(==100)]" options:0 metrics:nil views:views]];`
答案 1 :(得分:1)
所有底部对齐的水平布局:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[view1(==100)]-10-[view2(==100)]"
options:NSLayoutFormatAlignAllBottom
metrics:nil
views:views]
垂直布局未触及:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[view1]"
options:0
metrics:nil
views:views]
请注意,有两种方法 - 限制超视图顶部的每个视图与对齐公共顶部/底部/基线/中心周围的所有视图的方式明显不同。而其他答案无法解决中心对齐的问题,顺便说一句。
UPD:这是在布局中使用对齐选项的完整工作示例:
- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
NSTextField *view1 = [[NSTextField alloc] initWithFrame:NSZeroRect];
NSTextField *view2 = [[NSTextField alloc] initWithFrame:NSZeroRect];
NSView *contentView = [self.window contentView];
NSDictionary *views = NSDictionaryOfVariableBindings(view1, view2);
[view1 setTranslatesAutoresizingMaskIntoConstraints:NO];
[view2 setTranslatesAutoresizingMaskIntoConstraints:NO];
[contentView addSubview:view1];
[contentView addSubview:view2];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[view1(==100)]-[view2(==100)]"
options:NSLayoutFormatAlignAllBottom
metrics:nil
views:views]];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[view1]"
options:0
metrics:nil
views:views]];
}