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

create a loop to add 40 everytime a value is called

我正在定位 3 个具有相同高度和宽度以及相同 x 值的 uibtton,我唯一想要改变的是我希望每个 uibutton 添加 40 个正数以将其分开。我认为有一些方法可以通过循环来执行此操作,而不是像我在下面所做的那样手动执行此操作。我希望 (equalTo: view.centerYAnchor, constant : 0), 每次被调用时都被 yP plus 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),

试试这个。

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
    }
}

您可以使用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
}