Обновление 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 автоматически обновлять ширину при изменении ориентации устройства.