Search code examples
swiftfor-loopconstraintscountervar

create a loop to add 40 everytime a value is called


I am positioning 3 uibttons with the same height and wideth and same x value the only thing I want change is that I want each uibutton added 40 positivie it to seperate it. I would think there is some way to do this with a loop instead of doing this manually like i did below. I want (equalTo: view.centerYAnchor, constant : 0), to be replaced with yP plus 40 everytime it is called.

   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),

Solution

  • Try this.

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