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