使按钮列表水平与自动布局对齐

达西尔瓦

我正在通过自动布局以编程方式创建许多UIButton:

for (int i=0; i<buttonsArray.count; i++) {

    UIButton *button = (UIButton*)[UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button setTitle:[NSString stringWithFormat:@" %@ ",titleString]  forState:UIControlStateNormal];
    [button sizeToFit];
    button.translatesAutoresizingMaskIntoConstraints = NO;
    button.tag =i;     
    [view addSubview:button];

    // check if first button or button would exceed maxWidth
    if ((i == 0) || (runningWidth + button.frame.size.width > maxWidth)) {
        // wrap around into next line
        runningWidth = button.frame.size.width;

        if (i== 0) {
            // first button (top left)
            // horizontal position: same as previous leftmost button (on line above)
            NSLayoutConstraint *horizontalConstraint = [NSLayoutConstraint constraintWithItem:button
                                                                                    attribute:NSLayoutAttributeLeft
                                                                                    relatedBy:NSLayoutRelationEqual
                                                                                       toItem:reuseView
                                                                                    attribute:NSLayoutAttributeLeft
                                                                                   multiplier:1.0f
                                                                                     constant:5];
            [reuseView addConstraint:horizontalConstraint];

            // vertical position:
            NSLayoutConstraint *verticalConstraint = [NSLayoutConstraint constraintWithItem:button
                                                                                  attribute:NSLayoutAttributeTop
                                                                                  relatedBy:NSLayoutRelationEqual
                                                                                     toItem:reuseView
                                                                                  attribute:NSLayoutAttributeLeft
                                                                                 multiplier:1.0f
                                                                                   constant:5];
            [reuseView addConstraint:verticalConstraint];


        } else {
            // put it in new line
            UIButton *previousLeftmostButton = [buttons objectAtIndex:indexOfLeftmostButtonOnCurrentLine];

            // horizontal position: same as previous leftmost button (on line above)
            NSLayoutConstraint *horizontalConstraint = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:previousLeftmostButton attribute:NSLayoutAttributeLeft multiplier:1.0f constant:0.0f];
            [reuseView addConstraint:horizontalConstraint];

            // vertical position:
            NSLayoutConstraint *verticalConstraint = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:previousLeftmostButton attribute:NSLayoutAttributeBottom multiplier:1.0f constant:verticalSpaceBetweenButtons];
            [reuseView addConstraint:verticalConstraint];

            indexOfLeftmostButtonOnCurrentLine = i;
        }
    } else {
        // put it right from previous buttom
        runningWidth += button.frame.size.width + horizontalSpaceBetweenButtons;

        UIButton *previousButton = [buttons objectAtIndex:(i-1)];

        // horizontal position: right from previous button
        NSLayoutConstraint *horizontalConstraint = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:previousButton attribute:NSLayoutAttributeRight multiplier:1.0f constant:horizontalSpaceBetweenButtons];
        [reuseView addConstraint:horizontalConstraint];

        // vertical position same as previous button
        NSLayoutConstraint *verticalConstraint = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:previousButton attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.0f];
        [reuseView addConstraint:verticalConstraint];
    }

    [buttons addObject:button];
}

所以我得到这样的界面:

在此处输入图片说明

但是,我需要在视图中心水平对齐按钮吗?任何想法如何做到这一点?

微带

最简单的方法是将其放入容器UIView并将视图置于容器的中心。

Apple的文档还建议了一种替代方法,即在第一个视图之前创建一个视图,在最后一个视图创建两个视图,并使这些视图的宽度相等。我发现这在大多数情况下会更有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用自动布局水平对齐5个按钮的最佳方法是什么

来自分类Dev

在水平线性布局内对齐按钮

来自分类Dev

带按钮的iOS水平自动布局

来自分类Dev

如何使用大小类和自动布局将两个UI按钮在Xib中水平对齐

来自分类Dev

使用自动布局水平地对齐UIButton(以编程方式)

来自分类Dev

如何使用自动布局连续对齐2个按钮?

来自分类Dev

如何使用自动布局连续对齐2个按钮?

来自分类Dev

使用自动布局的带有按钮的iOS水平滚动视图

来自分类Dev

使UIImageView与自动布局对齐

来自分类Dev

自动布局对齐问题

来自分类Dev

水平自动布局约束

来自分类Dev

如何水平对齐按钮?

来自分类Dev

单选按钮水平对齐

来自分类Dev

列表项的水平对齐

来自分类Dev

如何使用自动布局将UIButtons定位在水平线上(环绕,左对齐)?

来自分类Dev

iOS自动布局:将UILabel的左边缘与容器中的水平中心对齐?

来自分类Dev

标签的自动布局水平对齐,除非另一个项目侵入

来自分类Dev

按钮和自动布局

来自分类Dev

自动布局子视图对齐

来自分类Dev

自动布局和对齐约束

来自分类Dev

Android线性布局按钮对齐

来自分类Dev

单选按钮布局以使水平

来自分类Dev

自动布局:并排对齐两个按钮并在没有图像时向右移动

来自分类Dev

Vaadin中的水平布局对齐

来自分类Dev

Divs的水平中心对齐(网格布局)

来自分类Dev

Vaadin中的水平布局对齐

来自分类Dev

CSS 两列布局未水平对齐

来自分类Dev

列表未水平对齐/居中

来自分类Dev

按钮对齐问题-自动换行?