我想要实现的是设置按钮/图像水平居中与主视图,包括其宽度设置为屏幕宽度的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"]] 和将顶部位置绑定到最后添加项目的底部位置。
怎么可能? THX
答案 0 :(得分:2)
iOS 9引入了一个名为UIStackView的新类,允许您执行此操作:
https://www.hackingwithswift.com/read/31/2/uistackview-by-example
在Github上甚至还有iOS 7的后端端口。
有些人可能会为此向我投票,但有时候,当谈到自动布局我只是说,$ @#&我将自己编写布局代码。这是其中一种情况(尤其是当UIStackView不可用时)。
首先创建所有视图并将它们存储在viewDidLoad中的数组中。
覆盖视图控制器上的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)
}
}
这比在代码中创建的一系列约束更容易调试。