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