gpt4 book ai didi

ios - 如何使用 For/While 循环添加多个图像及其每个约束

转载 作者:行者123 更新时间:2023-11-28 21:40:25 26 4
gpt4 key购买 nike

我想要实现的是将按钮/图像设置为与主视图水平居中,包括将其宽度设置为屏幕宽度的 75%。我想在屏幕上垂直放置 7 个这样的图像/按钮(逐行)。

我正在使用以下代码,它运行良好:

UIImageView *l1 = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 100, 100)];
[l1 setImage:[UIImage imageNamed:@"level-1"]];
[l1 setContentMode:UIViewContentModeScaleAspectFit];
l1.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:l1];

NSLayoutConstraint *c1 = [NSLayoutConstraint
constraintWithItem:l1
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeTop
multiplier:1.0f
constant:20.f
];
[self.view addConstraint:c1];
NSLayoutConstraint *c1b = [NSLayoutConstraint
constraintWithItem:l1
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterX
multiplier:1.0f
constant:0.f
];
[self.view addConstraint:c1b];
NSLayoutConstraint *c1c = [NSLayoutConstraint
constraintWithItem:l1
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeWidth
multiplier:0.75f
constant:0.f
];
[self.view addConstraint:c1c];

我不想为不同的图像重复相同的代码,而是想使用一些迭代过程并增加图像名称 [UIImage imageNamed:@"level-xxx"]] 并将顶部位置绑定(bind)到最后添加的项目的底部位置。

这怎么可能?谢谢

最佳答案

iOS 9 引入了一个名为 UIStackView 的新类,它允许您执行此操作:

https://www.hackingwithswift.com/read/31/2/uistackview-by-example

在 Github 上什至有 iOS 7 的反向端口。

有些人可能会为此投票反对我,但有时,当涉及到自动布局时,我只是说,$@#& 我将自己编写布局代码。这就是其中一种情况(尤其是当 UIStackView 不可用时)。

首先创建所有 View 并将它们存储在 viewDidLoad 中的数组中。

覆盖 View Controller 上的 viewDidLayoutSubviews 并循环遍历数组,设置框架并将它们一一布置。

-(void)viewDidLayoutSubviews
{
NSArray* imageList = self.imageViewList

// calculate it if necessary
CGPoint startPoint = CGPointMake(200,200)
CGFloat spacing = 50
for(UIView *view in imageList) {
view.center = startPoint
startPoint = CGPointMake(startPoint.x , startPoint.y + spacing)
}
}

这比在代码中创建一堆约束要明显得多,也更容易调试。

关于ios - 如何使用 For/While 循环添加多个图像及其每个约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32332314/

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