我们如何使用自动布局提供按钮之间的水平间距(约束与视觉格式)

时间:2015-08-01 05:16:41

标签: ios swift

您好我正在尝试使用自动布局在我的视图控制器上以编程方式插入三个按钮,这里我想保持按钮之间的水平间距" 10"但它没有正确设置请帮助我使用" visual formate"

使用约束

我的代码: -

NSDictionary * views = NSDictionaryOfVariableBindings(accessoryView,leftButton,firstButton,rightButton);

     //middle button
        constraint = [NSLayoutConstraint constraintWithItem:firstButton attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0f constant:40.f];
        [self.view addConstraint:constraint];

        constraint = [NSLayoutConstraint constraintWithItem:firstButton attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f];
        [self.view addConstraint:constraint];

        constraint = [NSLayoutConstraint constraintWithItem:firstButton attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem: nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:50.0f];
        [self.view addConstraint:constraint];

        constraint = [NSLayoutConstraint constraintWithItem:firstButton attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem: nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:30.0f];
        [self.view addConstraint:constraint];

        //Left button
        constraint = [NSLayoutConstraint constraintWithItem:leftButton attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0f constant:40.f];
        [self.view addConstraint:constraint];

        constraint = [NSLayoutConstraint constraintWithItem:leftButton attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem: nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:50.0f];
        [self.view addConstraint:constraint];

        constraint = [NSLayoutConstraint constraintWithItem:leftButton attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem: nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:30.0f];
        [self.view addConstraint:constraint];

        //Right button
        constraint = [NSLayoutConstraint constraintWithItem:rightButton attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0f constant:40.f];
        [self.view addConstraint:constraint];

        constraint = [NSLayoutConstraint constraintWithItem:rightButton attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem: nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:50.0f];
        [self.view addConstraint:constraint];

        constraint = [NSLayoutConstraint constraintWithItem:rightButton attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem: nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:30.0f];
        [self.view addConstraint:constraint];

        //Horizental spacing
        NSArray * horizontalConstraintsforbuttons = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[leftButton]-10-[firstButton]-10-[rightButton]|" options:0 metrics:nil views:views];

        [self.view addConstraints:horizontalConstraintsforbuttons];

1 个答案:

答案 0 :(得分:0)

尝试这个....给按钮1尾随等于按钮2领先,随心所欲

// btn1.trailing = btn2.leading
[self.view  addConstraint:[NSLayoutConstraint constraintWithItem:btn2
                                                       attribute:NSLayoutAttributeLeading
                                                       relatedBy:NSLayoutRelationEqual
                                                           toItem:btn1
                                                       attribute: NSLayoutAttributeTrailing
                                                      multiplier:1
                                                        constant:10]];


 // btn2.trailing = btn3.leading
[self.view  addConstraint:[NSLayoutConstraint constraintWithItem:btn3
                                                       attribute:NSLayoutAttributeLeading
                                                       relatedBy:NSLayoutRelationEqual
                                                           toItem:btn2
                                                       attribute: NSLayoutAttributeTrailing
                                                      multiplier:1
                                                        constant:10]];

因此它变为-|btn1|-10-|btn2|-10-|btn3|-