0

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

2 Answers2

0

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
    }
}
  • Can you look at this question https://stackoverflow.com/questions/58741091/create-a-loop-to-space-2-different-objects-on-a-uiviewcontroller? It's similar. –  Nov 07 '19 at 02:53
0

You can use the enumerated method to loop through the indices and the buttons at the same time. You'll need the indices to calculate the top constraint. You should also activate your constraints.

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
}
Sweeper
  • 213,210
  • 22
  • 193
  • 313
  • Can you look at this question stackoverflow.com/questions/58741091/…? It's similar. –  Nov 07 '19 at 02:55