Изменение расположения якорей взгляда на действие

У меня есть одна верхняя метка, один вид и кнопка.

В ViewDidLoad() Метод Я дал некоторые ограничения макета для представления. При нажатии на кнопку мне нужно обновить эти ограничения (то есть вид должен двигаться вниз). Как мне это сделать.

Вот мой код для этого. Но это не работает.

let keyView = UIView()

override func viewDidLoad() {

    keyView.frame = CGRect(x: 0, y: 0, width: 100, height: 30)
    keyView.backgroundColor = UIColor.cyan
    keyView.translatesAutoresizingMaskIntoConstraints = false
    containerView.addSubview(keyView)
    keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor , constant: 10).isActive = true
    keyView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 20).isActive = true
    keyView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -20).isActive = true
    keyView.bottomAnchor.constraint(equalTo: keyView.topAnchor, constant: keyView.frame.size.height).isActive = true
}

Код в этом действии заключается в следующем.

  func buttonAction(sender: UIButton!) {

    keyView.translatesAutoresizingMaskIntoConstraints = false
    keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor, constant: CGFloat(i*50))
    keyView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 20)
    keyView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -20)
    keyView.bottomAnchor.constraint(equalTo: keyView.topAnchor, constant: keyView.frame.size.height)
    i + =1
}

Согласно приведенному выше коду, при нажатии на кнопку keyView должен двигаться вниз. Но это не движется вниз.

Пожалуйста, помогите мне. Заранее спасибо.

1 ответ

Решение

Возьмите глобальную переменную типа NSLayoutConstraint, которая выглядит следующим образом:

var keyViewTopConstraint: NSLayoutConstraint?

Теперь в viewDidLoad, давая начальные ограничения. Дайте следующим

    keyViewTopConstraint = keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor , constant: 10)
    keyViewTopConstraint?.isActive = true

Теперь в этом действии. удалите начальное ограничение и создайте другое ограничение и сделайте его активным. Для этого сделайте следующее

   keyViewTopConstraint?.isActive = false
   keyViewTopConstraint = keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor, constant: CGFloat(i*50))
   keyViewTopConstraint?.isActive = true
Другие вопросы по тегам