UIViews使用VisualFormat不均匀分布

时间:2014-03-04 10:13:57

标签: ios uiview constraints autolayout visual-format-language

我只是在使用AutoLayout(使用代码)摆弄,并碰到了一些我不太懂的东西。我举了一个简单的例子来证明这个问题:

- (void)viewDidLoad
{
    [super viewDidLoad];

    //create views
    UIView *redView = [UIView new];
    redView.backgroundColor = [UIColor redColor];
    redView.translatesAutoresizingMaskIntoConstraints = NO;

    UIView *blueView = [UIView new];
    blueView.backgroundColor = [UIColor blueColor];
    blueView.translatesAutoresizingMaskIntoConstraints = NO;

    //add views to viewcontroller's view
    [self.view addSubview:redView];
    [self.view addSubview:blueView];

    //add contraints
    NSDictionary *views = NSDictionaryOfVariableBindings(redView, blueView);

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[redView]-|" options:0 metrics:nil views:views]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[blueView]-|" options:0 metrics:nil views:views]];

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[redView]-[blueView]-|" options:0 metrics:nil views:views]];
}

我希望得到以下结果:http://i.stack.imgur.com/LCWQP.png

但相反,它会给出以下结果:http://i.stack.imgur.com/DJK5i.png

现在,我知道它可以通过使用[NSLayoutConstraint constraintWithItem: attribute: relatedBy: toItem: attribute: multiplier: constant: ]来解决,但我想知道是否有VisualFormat选项,或者我的代码中只缺少某些内容......

在我的学习之旅中提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

@"V:|-[redView]-[blueView]-|"

这表示redView的底部应该与blueView的顶部对齐,就是这样。它没有说明redView和blueView的相对高度。

如果你想让它们高度相等,你可以这样说。

@"V:|-[redView]-[blueView(==redView)]-|"