创建一个循环,每次调用一个值时加40

问题描述 投票:0回答:2

我要以相同的高度,宽度和相同的x值来定位3个uibtton,唯一要更改的是我希望每个uibutton添加40 positivie来分隔它。我认为有某种方法可以通过循环执行此操作,而不是像下面的操作那样手动执行此操作。我想(equalTo:view.centerYAnchor,constant:0),每次被yP加40替换。

   var yP = 0


    undoButton.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :25),
       undoButton.topAnchor.constraint(equalTo: view.centerYAnchor, constant : 0),
       undoButton.widthAnchor.constraint(equalToConstant: CGFloat(widthBox)),
       undoButton.heightAnchor.constraint(equalToConstant: 20),

       clearButton.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :25),
       clearButton.topAnchor.constraint(equalTo: view.centerYAnchor, constant : 40),
       clearButton.widthAnchor.constraint(equalToConstant: CGFloat(widthBox)),
       clearButton.heightAnchor.constraint(equalToConstant: 20),

       color.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :25),
       color.topAnchor.constraint(equalTo: view.centerYAnchor, constant : 80),
       color.widthAnchor.constraint(equalToConstant: CGFloat(widthBox)),
       color.heightAnchor.constraint(equalToConstant: 20),
swift for-loop constraints counter var
2个回答
0
投票

尝试一下。

func setConstraints() {
    var yPosition: CGFloat = 0

    [undoButton, clearButton, color].forEach { button in
        NSLayoutConstraint.activate([
            button.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :25),
            button.topAnchor.constraint(equalTo: view.centerYAnchor, constant : yPosition),
            button.widthAnchor.constraint(equalToConstant: CGFloat(widthBox)),
            button.heightAnchor.constraint(equalToConstant: 20)
        ])
        yPosition += 40
    }
}

0
投票

您可以使用enumerated方法同时遍历索引和按钮。您将需要索引来计算最大约束。您还应该激活约束。

for (index, button) in [undoButton, clearButton, color].enumerated() {
    button.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :25).isActive = true
    // note this line
    button.topAnchor.constraint(equalTo: view.centerYAnchor, constant : index * 40).isActive = true 
    button.widthAnchor.constraint(equalToConstant: CGFloat(widthBox)).isActive = true
    button.heightAnchor.constraint(equalToConstant: 20).isActive = true
}
© www.soinside.com 2019 - 2024. All rights reserved.