создать цикл для добавления 40 при каждом вызове значения - PullRequest
0 голосов
/ 03 ноября 2019

Я позиционирую 3 uibtton с одинаковой высотой и шириной и тем же значением x, единственное, что я хочу изменить, это то, что я хочу, чтобы каждый uibutton добавил 40 позитивов, чтобы отделить его. Я думаю, что есть какой-то способ сделать это с помощью цикла вместо того, чтобы делать это вручную, как я делал ниже. Я хочу, чтобы (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),

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Вы можете использовать метод 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
}
0 голосов
/ 03 ноября 2019

Попробуйте это.

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