Я встановив свої обмеження в 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, набагато краще.
Обмеження оновлення насправді стосуються лише роботи, яку потрібно періодично повторювати.
Крім того, досить просто змінити обмеження, коли виявиться необхідність це зробити; тоді як, якщо взяти цю логіку окремо від іншого коду, який пов’язаний з нею, і перенести її в окремий метод, який виконується пізніше, коду стає набагато важче слідувати, тому вам буде важче підтримувати , іншим людям буде набагато важче зрозуміти.
Отже, коли вам потрібно буде використовувати обмеження на оновлення?
Ну, це зводиться до продуктивності.
Якщо ви виявите, що просто змінювати обмеження на місці занадто повільно, тоді обмеження оновлення можуть вам допомогти.
Виявляється, зміна обмеження всередині обмежень на оновлення насправді швидша, ніж зміна обмеження в інший час.
Причиною цього є те, що двигун здатний розглядати всі зміни обмежень, які відбуваються в цьому проході, як пакетний.