Я установил свои ограничения в viewDidLoad
/ loadView
(я нацелен на iOS> = 6). updateViewConstraints
полезен для изменения значений ограничений, например, если какое-то ограничение зависит от ориентации экрана (я знаю, это плохая практика), вы можете изменить его constant
в этом методе.
Добавление ограничений viewDidLoad
показано во время сеанса «Введение в автоматический макет для iOS и OS X» (WWDC 2012), начиная с 39:22. Я думаю, что это одна из тех вещей, о которых говорят на лекциях, но не отражаются в документации.
ОБНОВЛЕНИЕ: я заметил упоминание о настройке ограничений в управлении ресурсами в контроллерах представления :
Если вы предпочитаете создавать представления программно, вместо использования раскадровки, вы делаете это путем переопределения loadView
метода контроллера представления . Ваша реализация этого метода должна делать следующее:
(...)
3. Если вы используете автоматический макет, назначьте достаточные ограничения для каждого из только что созданных представлений, чтобы контролировать положение и размер ваших представлений . В противном случае, реализовать viewWillLayoutSubviews
и
viewDidLayoutSubviews
методы для настройки каркасов подвидов в иерархии представлений. См. «Изменение размера представлений контроллера представления».
UPDATE 2 : Во время WWDC 2015 Apple , дал новое объяснение о updateConstraints
и updateViewConstraints
рекомендуемое использование:
На самом деле, все это дает представлениям возможность внести изменения в ограничения как раз вовремя для следующего прохода макета, но на самом деле это часто не требуется.
В идеале вся ваша начальная установка ограничений должна происходить внутри Interface Builder.
Или, если вы действительно обнаружите, что вам нужно распределить свои ограничения программно, гораздо лучше какое-нибудь место, например viewDidLoad.
Ограничения обновления на самом деле предназначены только для работы, которую необходимо периодически повторять.
Кроме того, довольно просто изменить ограничения, когда вы обнаружите в этом необходимость; тогда как, если вы возьмете эту логику отдельно от другого кода, связанного с ней, и переместите ее в отдельный метод, который будет выполняться позже, вашему коду станет намного труднее следовать, поэтому вам будет труднее поддерживать , другим людям будет намного труднее понять.
Итак, когда вам нужно использовать ограничения обновления?
Что ж, все сводится к производительности.
Если вы обнаружите, что простое изменение ограничений на месте слишком медленно, то ограничения обновления могут вам помочь.
Оказывается, изменение ограничения внутри ограничений обновления на самом деле происходит быстрее, чем изменение ограничения в другое время.
Причина в том, что движок может обрабатывать все изменения ограничений, которые происходят в этом проходе, как пакет.