gpt4 book ai didi

ios - 将按钮列表与自动布局水平对齐

转载 作者:行者123 更新时间:2023-12-01 22:46:35 25 4
gpt4 key购买 nike

我正在使用自动布局以编程方式创建许多 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];
}

所以我得到一个这样的界面:

enter image description here

但是,我需要在 View 中心水平对齐按钮吗?
知道怎么做吗?

最佳答案

最简单的方法是将其放入容器 UIView 中,并在其容器中居中放置 View 。

Apples 文档还建议创建两个 View 的替代方案,一个在第一个之前,一个在最后,并使这些 View 的宽度相等。在大多数情况下,我发现这需要更多的努力。

关于ios - 将按钮列表与自动布局水平对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25057681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com