Автомакет — это все или ничего в раскадровке?

Я работал над корпоративным клиентским приложением для iPad, которое имеет довольно сложную иерархию контроллеров представления сдерживания. Недавно мне пришлось реализовать редизайн в начальном представлении приложения, представлении входа на сервер. Я решил воспользоваться возможностью, чтобы реализовать редизайн с помощью автоматического макета и оставить остальную часть приложения без изменений. После пары дней просмотра видеороликов WWDC и взлома кода я получил плавное анимированное изменение положения текстовых полей входа в систему для событий поворота и отображения/скрытия клавиатуры. Удовлетворенный результатами, я git объединил ветвь рефакторинга только для того, чтобы обнаружить сбой приложения при использовании приложения после входа в систему без подсказок отладчика. Наконец-то я понял, что автоматический макет каким-то образом каскадировался на контроллеры представления дочернего контейнера.

В Main.storyboard есть «основной» навигационный контроллер, который имеет корневой контроллер представления RootViewController, представление которого является контейнером для представлений дочернего контроллера представления, начиная с представления входа в систему, а затем переключается на тот контроллер представления, который последний раз использовался пользователем. После рефакторинга в IB в контроллере входа на сервер установлен флажок «Использовать автомакет». Но вдруг один из дочерних контроллеров представления, у которого никогда не был включен автомакет, также проверяется. Когда я снимаю флажок на этом контроллере представления, внезапно мой флажок авторазметки контроллера входа в систему на сервере снимается. Означает ли это, что автоматическая компоновка включена/отключена на ВСЕХ контроллерах представления в раскадровке?? Если нет, то кто-нибудь знает, что происходит? Xкод 4.6


person seeker12    schedule 07.02.2013    source источник


Ответы (1)


Ответ пришел от KMT на форумах разработчиков Apple, что автоматическая компоновка включена на уровне раскадровки. Я как-то пропустил этот важный момент в видеороликах WWDC.

Я решил свою конкретную проблему, создав новый файл раскадровки с включенным «Использовать автомакет» и переместив в него мои контроллеры представления с поддержкой автомакета. К сожалению, в процессе обнаружения того, что Autolayout включен на уровне раскадровки, это означало, что всякий раз, когда я снимал флажок «Использовать Autolayout» для любого объекта в Main.storyboard, IB применяла ограничения наилучшего предположения для замены существующих атрибутов пружин / распорок, которые у меня были. настроено ранее. А затем, сняв флажок «Использовать автомакет», он применил атрибуты пружин / распорок наилучшего предположения, чтобы заменить его ограничения на основе наилучшего предположения. Конечным результатом было то, что мне пришлось повторно применить настройки пружин/распорок ко многим представлениям в файле раскадровки.

person seeker12    schedule 07.02.2013