constraintsWithVisualFormat为所有视图设置相同的Y位置

时间:2014-10-01 06:16:42

标签: ios objective-c iphone autolayout

我只是在玩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位置。

请尽可能解释答案

2 个答案:

答案 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]];
}

Results