如何使用For / While循环

时间:2015-09-01 12:58:37

标签: ios xcode6

我想要实现的是设置按钮/图像水平居中与主视图,包括其宽度设置为屏幕宽度的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

1 个答案:

答案 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)
    }
}

这比在代码中创建的一系列约束更容易调试。