Обновление widthAnchor on Ориентация устройства - PullRequest
0 голосов
/ 13 мая 2018

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

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

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

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

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

Если я проверю это следующим образом:

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

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

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

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

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

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

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

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

0 голосов
/ 14 мая 2018

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