使用自动布局

时间:2015-05-27 02:13:26

标签: ios objective-c autolayout nslayoutconstraint

我在UIButtons中有4个static cell,宽度为constraints,并且对所有4个边都有常规约束。

enter image description here

在某个时刻,我想更改constraints宽度。这是我的代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.constraintArray = [[NSArray alloc] initWithObjects:self.budgetWidthConstraint, self.categorieWidthConstraint, self.extraButtonWidthConstraint, nil];
}

- (void)myLayout
{
    CGFloat cellWidth = self.thirdCell.frame.size.width;

    [self.constraintArray[2] setConstant:cellWidth / 6];
    [self.constraintArray[1] setConstant:cellWidth / 6];
    [self.constraintArray[0] setConstant:cellWidth / 3];
}

- (void)myAction {
    [self myLayout];
}

问题是,当simulators方向发生变化时,buttons宽度不会改变为它们应该的大小。我必须再次致电myAction,以便buttons按照自己的意愿进行布局。我累了从myLayout致电viewDidLayoutSubviews

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    [self myLayout];
}

但这不起作用,我没有任何错误。

更新1:

Constraint宽度从这样开始:

constraintArray[1] =  62.500000
constraintArray[2] =  62.500000
constraintArray[3] =  125.000000

旋转设备时:

constraintArray[1] =  62.500000
constraintArray[2] =  62.500000
constraintArray[3] =  80.500000

轮换后应该是什么:(或在我致电myAction之后)

constraintArray[1] =  55.083333 
constraintArray[2] =  55.083333 
constraintArray[3] =  110.000000

更新2:

以下是指向具有相同问题的类似项目的链接:Project

2 个答案:

答案 0 :(得分:1)

我只是查看你的项目。我知道你已经错误地实现了它。请参阅约束对边距的影响。在这里所有按钮都没有得到适当的保证金。

此外,您已将等宽度应用于100导致问题。 您的第二个和第三个视图大小相同,但您的第四个视图大小不同。

要解决此问题,您应该在第四个按钮后再按一个按钮(第五个按钮)。 现在在视图中添加第二个和第三个视图,在视图内添加第四个和第五个视图。并为第一个按钮,第二个视图和第三个视图指定相等的宽度。现在改变方向它不会引起问题。你应该更新第四和第五个按钮,如第二个和第三个。

答案 1 :(得分:0)

要在父视图调整大小时调整按钮大小,请不要设置宽度约束。而是设置它们的前导和尾随约束,这将使它们的宽度变得灵活。

如果需要以编程方式更改宽度,请调整前导或尾随约束。

要使宽度相等,请按比例设置"等宽度"约束并设置其乘数(例如乘数= 2表示一个是另一个的两倍)。

然后,如果您需要隐藏按钮,请给出宽度约束以及等宽度约束,但将宽度约束优先级设置为1并将等宽度约束优先级设置为999.您可以通过以编程方式隐藏/显示按钮交换这些约束的优先级