Ответ 1
К тому времени, когда вы нажмете viewDidLoad
, механизм ограничений еще не был применен, и начальное местоположение представлений еще не установлено. Поэтому не стесняйтесь добавлять исходные ограничения в viewDidLoad
, но вы захотите отложить animateWithDuration
до более поздней стадии процесса (например, viewDidAppear
).
Например, предположим, у вас есть какое-то ограничение, которое вы добавили в Интерфейсный Разработчик (IB). Вы можете добавить ссылку @IBOutlet
к нему с помощью control -dragging из ограничения в схеме документа на левой панели в Интерфейсном Разработчике до редактора помощника:
Теперь, когда у вас есть ссылка на это ограничение, теперь вы можете программно изменить constant
значение для этого ограничения (но, опять же, сделайте это в viewDidAppear
, а не в viewDidLoad
, если вы хотите видеть это анимированным при представлении представления):
@IBOutlet weak var topConstraint: NSLayoutConstraint!
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
topConstraint.constant = 100
UIView.animate(withDuration: 2) {
self.view.layoutIfNeeded()
}
}
Процесс одинаков для программно созданных ограничений. Просто сохраните ссылку на ограничение, а затем в viewDidAppear
обновите constant
и затем layoutIfNeeded()
вызов layoutIfNeeded()
.