Обновление widthAnchor on Ориентация устройства

Так что у меня есть это ограничение в моем контроллере для представления, как это:

someView.widthAnchor.constraint(equalToConstant: view.bounds.width).isActive = true

Теперь я добавил это ограничение в willLayoutSubviews обновить его при ротации устройства.

Но, похоже, он не обновляется, тем более, что он добавляет еще одно ограничение ширины, которое, конечно, конфликтует со старым ограничением ширины.

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

Что, если я проверю это так:

someView.constraints.forEach {
    someView.removeContraint($0)
}

Это работает, как и ожидалось, только он, конечно, удаляет некоторые ограничения, которые я не хочу удалять.. так что тоже не решение..

Заранее спасибо!

2 ответа

Решение

Sol1

зацепить ограничение ширины как IBOutlet и изменить его константу в коде, как это

self.widthCon.constant = //value
self.view.layoutIfNeeded()

Sol2

удалить ограничение с идентификатором

someView.constraints.forEach {
   if $0.identifier == "set_id" {
      someView.removeConstraint($0)
      someView.widthAnchor.constraint(equalToConstant: view.bounds.width).isActive = true
   }
}

Альтернативное решение:

Если у вас есть ссылка на superview из someView тогда вы можете просто назначить равные ограничения ширины следующим образом:

someView.widthAnchor.constraint(equalTo: superView.widthAnchor)

Таким образом, вы можете позволить модулю Autolayout автоматически обновлять ширину при изменении ориентации устройства.

Другие вопросы по тегам