如何使用自动布局水平设置三个按钮

时间:2015-04-06 19:36:22

标签: ios iphone uibutton xcode6 autolayout

我有一个要求,我尝试在水平放置的视图底部设置3个按钮,没有任何间隙。我附上了一个屏幕截图,显示我需要如何显示,另一个显示当前显示的方式。

我以编程方式使用以下约束来设置此

NSDictionary *views = NSDictionaryOfVariableBindings(btnCreateAccount,btnForgotuserid,btnForgotPassword);

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:btnCreateAccount attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:0]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[btnCreateAccount][btnForgotuserid(==btnCreateAccount)][btnForgotPassword(==btnCreateAccount)]|" options:NSLayoutFormatAlignAllBottom metrics:nil views:views]];

required Actual

请帮我解决这个问题

编辑:在iOS 7中,请参见屏幕截图

enter image description here

谢谢, 维诺德。

1 个答案:

答案 0 :(得分:2)

我已经尝试过您的代码,但约束似乎工作正常。问题可能出在其他地方。

这是我尝试的代码,以编程方式创建所有按钮:

UIButton *b1 = [[UIButton alloc] init];
UIButton *b2 = [[UIButton alloc] init];
UIButton *b3 = [[UIButton alloc] init];

for (UIButton *b in @[b1, b2, b3]) {
    [b setTranslatesAutoresizingMaskIntoConstraints:NO];
    [self.view addSubview:b];
    [b.layer setBorderWidth:1];
}
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:b1 attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:0]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[b1]-0-[b2(==b1)]-0-[b3(==b1)]-0-|" options:NSLayoutFormatAlignAllBottom metrics:nil views:@{ @"b1":b1, @"b2":b2, @"b3":b3 }]];

确保在按钮上拨打setTranslatesAutoresizingMaskIntoConstraints:NO。如果您在故事板中创建它们,则需要删除在那里添加的隐式约束。

让我知道这是怎么回事,如果你需要更多的帮助。