使用约束来自动调整间距ios

时间:2015-11-21 10:16:57

标签: ios iphone ipad constraints

你好我正在使用约束来水平和垂直地显示视图,它运行良好,

但是现在根据我的要求,我必须使用约束,如果我隐藏(设置隐藏)任何放置的按钮或标签,那么剩下的按钮或标签必须自动调整。

对于ex: - 我使用等间距的系列中的四个按钮(填充视图)。现在如果我隐藏代码中的一个按钮,那么剩下的三个按钮应该根据空间调整它们

我想要这个: image with 4 buttons

转换为: this image

如果我隐藏了四个按钮中的一个。

3 个答案:

答案 0 :(得分:2)

您可以设置动画并将其宽度约束更改为0,而不是隐藏按钮。这可能看起来更好

即是这样的:

button2WidthConstraint.constant = 0 
UIView.animateWithDuration(0.3) { () -> Void in
    self.view.setNeedsLayout()
}

答案 1 :(得分:2)

仅使用自动布局有点困难。即使您只是将宽度约束更改为0,您也必须处理间距。您需要以不同方式调整边缘按钮的间距,然后调整中间的按钮 - 当您将宽度更改为0时,仍有左右约束,您还需要确定哪一个也为零。

一种方法是使用exit;自动处理此案例。您可以在故事板中设置按钮的间距和分布,使sample app很少,这样您就可以自己查看设置。

之后,您只需致电:UIStackViewremoveFromSuperview即可为您分配其他按钮。您也可以为过渡设置动画。

答案 2 :(得分:1)

我试图通过这种方式解决问题,您可以根据自己的要求进行更改。我已经使用了UIView(你可以在这里使用UIButton)和UIStackView(水平轴)。

-(void)createOrUpdateUI
{
//View 1
UIView *view1 = [[UIView alloc] init];
view1.backgroundColor = [UIColor blueColor];
[view1.heightAnchor constraintEqualToConstant:40].active = true;
[view1.widthAnchor constraintEqualToConstant:60].active = true;


//View 2
UIView *view2 = [[UIView alloc] init];
view2.backgroundColor = [UIColor greenColor];
[view2.heightAnchor constraintEqualToConstant:40].active = true;
[view2.widthAnchor constraintEqualToConstant:60].active = true;

//View 3
UIView *view3 = [[UIView alloc] init];
view3.backgroundColor = [UIColor magentaColor];
[view3.heightAnchor constraintEqualToConstant:40].active = true;
[view3.widthAnchor constraintEqualToConstant:60].active = true;

//View 4
UIView *view4 = [[UIView alloc] init];
view4.backgroundColor = [UIColor magentaColor];
[view4.heightAnchor constraintEqualToConstant:40].active = true;
[view4.widthAnchor constraintEqualToConstant:60].active = true;


//Stack View
UIStackView *stackView = [[UIStackView alloc] init];
stackView.axis = UILayoutConstraintAxisHorizontal;
stackView.distribution = UIStackViewDistributionEqualSpacing;
stackView.alignment = UIStackViewAlignmentCenter;
stackView.spacing = 30;


NSArray *viewArray = [[NSArray alloc] initWithObjects:view1, view2, view3, nil];
for (UIView *view in viewArray) {
    [stackView addArrangedSubview:view];

}



stackView.translatesAutoresizingMaskIntoConstraints = false;
[self.view addSubview:stackView];


//Layout for Stack View
[stackView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor].active = true;
[stackView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor].active = true;

}

它和outpit一样: with three UIViews

在上面的代码中只是更改行:

NSArray *viewArray = [[NSArray alloc] initWithObjects:view1, view2, view3, nil];

NSArray *viewArray = [[NSArray alloc] initWithObjects:view1, view2, view3, view4, nil];

输出是: output with four button

希望它有所帮助。