Где мы должны разместить наш код авторазметки?
Я обычно устанавливаю весь свой код автоматической компоновки в методе updateCOnstratins моего контроллера представления для ограничений всех подклассов, определяющих представление. Затем в подпредставлениях я размещаю свои ограничения в методах updateConstraints. Это заставляет меня иметь свойство каждого отдельного представления в моем классе, поэтому я могу ссылаться на него позже, после того как я установил переводит.... в false. Но я читаю, что вам не нужно устанавливать его в updateConstraints. Просто я не читал статью, в которой человек говорит, что инженер по яблокам сказал, что если ограничения наложены только один раз, вы можете поместить их почти везде. Тем не менее, если у вас есть ограничения, которые меняются в течение жизненного цикла представлений, вы помещаете их в updateConstraints? Вот ссылки http://swiftandpainless.com/where-to-put-the-auto-layout-code/ http://swiftandpainless.com/dont-put-view-code-into-your-view-controller/,
Так, куда это должно пойти? Был ли это просто старый способ сделать это, и теперь это изменилось?
2 ответа
Обычно нет причин не помещать код создания ограничения в viewDidLoad
Преимущество которого вызывается только один раз. Для ограничений, которые меняются, я хотел бы связать этот код с тем, что непосредственно ускоряет изменение, таким как изменение в классе размера или удаление или вставка представления.
То, что вы сказали в своем посте, - это то, что вы обычно хотели бы сделать. Поместите любые ограничения, которые могут измениться в updateConstraints
, Это также означает, что вы должны сохранять ссылку на них, чтобы иметь возможность их обновлять или удалять / заменять. Любые статические можно поставить после вашего кода инициализации (init
метод UIView
или viewDidLoad
метод UIViewController
, например). Единственное реальное требование - вы можете добавлять ограничения только к представлениям, которые фактически находятся в иерархии представлений вместе, поэтому в любое время после добавления соответствующих представлений все будет в порядке.