Когда будет (или не будет) updateViewConstraints будет вызываться на моем контроллере просмотра для меня в рамках?
У меня есть контроллер представления, и я хочу уклониться и установить ограничения вида в updateViewConstraints.
У меня есть точка останова в этом методе, и она никогда не будет вызвана.
Почему это не может быть вызвано?
Когда инфраструктура захочет вызвать этот метод на моем контроллере просмотра?
Ответы
Ответ 1
updateViewConstraints
вызывается viewWillLayoutSubviews
(с помощью метода просмотра layoutSubviews
). Как следует из названия, это вызывается всякий раз, когда ваш контроллер просмотра должен обновить свой макет.
Если вы обнаружите, что updateViewConstraints
никогда не вызывается, вы должны убедиться, что вы вызываете super
методы вашего контроллера просмотра, где это необходимо.
Кроме того, похоже, что вы создаете свои ограничения внутри updateViewConstraints
? Это также может быть причиной вашей проблемы. Вы должны обновлять свои ограничения в этом методе, а не создавать их (так же, как в layoutSubviews
вы размещаете свои представления, но не создаете их).
Ответ 2
Вы находитесь в ViewController и хотите, чтобы система вызывала updateViewConstraints
, тогда вы должны называть это
[self.view setNeedsUpdateConstraints];
Ответ 3
Ваш UIView
должен реализовать + (BOOL)requiresConstraintBasedLayout
и вернуть YES
. В этом случае updateViewConstraints
будет изначально вызываться для установки ограничений.
Ответ 4
Просто угадайте, а не на 100% уверены:
updateViewConstraints не будет вызываться, если в корневом представлении вашего контроллера просмотра не требуется автоматическая компоновка. Таким образом, вам нужно хотя бы добавить одно ограничение в корневое представление (где-то в loadview или viewDidLoad) или установить
self.view.translatesAutoresizingMaskIntoConstraints = NO;
Это должно вызвать точку прерывания.