История:
У меня есть пользовательский контроллер контейнера, который точно так же, как UITabBarController, но с анимацией переключения. И я использую автоматический макет для достижения.
Поскольку переключатель между дочерними контроллерами является динамическим, соответствующие ограничения добавляются в контроллер дочернего представления, когда его представление добавляется в представление контейнера, а не предварительно настраивается в IB. (Конечно, ограничения добавляются в супервизор)
http://d.pr/i/q6NF Настройка контейнера контейнера
PS:
Деталь ограничений
H: | [Child] (изменить константу ограничения на анимацию слева/справа налево/влево)
H: [Ребенок (== Супер)]
V: | [Ребенок] |
Где проблема:
Один из дочерних контроллеров является навигационным контроллером, все идет не так, когда навигационный контроллер представляет собой контроллер модального представления (используя presentViewController:animated:completion:
) и отклоняет его (используя dismissViewControllerAnimated:completion:
), после того, как он появился/отклонил рамку навигации контроллер становится (x, y, 0, 0), Кажется, что автоматическая компоновка становится недействительной, возможно, ограничения были удалены.
http://d.pr/i/VmvL Настоящий/Отклоненный процесс
Исследование
Я еще не использовал код для проверки того, что происходит с этими ограничениями, но с помощью Spark Inspector я вижу изменение представления представлений во время текущего/увольнения процесса. Когда мой контроллер навигации представляет собой контроллер модального представления, iOS просто свопинг весь вид контроллера навигации в режиме просмотра модального представления. И когда появится представление контроллера навигации, автомат не работает больше.
Возможное решение
Одно из решений, которое я придумал, - это позволить моему контроллеру контейнера иметь модальный контроллер.
Или я просто изменяю свой контроллер контейнера без автоматического макета.
Факт с тех пор, как я начинаю использовать автоматическую компоновку, проблемы, которые этот метод заставляет просто доминировать над преимуществами. Помимо этой проблемы. Каждый раз, когда меняется ориентация интерфейса, представления внутри моего контроллера контейнера просто не могут автоматически настраивать макет, кажется, что в subviews всегда используется рамка супервизора перед изменением ориентации. Я дважды проверяю ограничения, которые я настраиваю, конфликтов нет и нет двусмысленности.
Мое предположение заключается в том, что мой пользовательский контроллер контейнера несовместим с представлением модального контроллера и изменением ориентации интерфейса в системе автоматического макета даже при настройке ограничений.
Xcode Environment
Xcode 5 beta, iOS 7SDK, target iOS6.1 Возможно, что-то не так с средой SDK?
Итак, я отправляю этот вопрос, пожалуйста, помогите мне!
Это мой первый вопрос, поэтому у меня недостаточно репутации для отправки изображений, но я предоставляю ссылки для скриншотов. Извините за это!