Изменение размеров представлений контроллера представления

Контроллер представления владеет своим собственным представлением и управляет содержанием представления. В процессе, контроллер представления также управляет подпредставлениями представления. Но в большинстве случаев, кадр представления не установлен непосредственно контроллером представления. Вместо этого кадр представления определяется тем, как представление контроллера представления выведено на экран. Более непосредственно это сконфигурировано объектом, используемым для отображения его. Другие условия в приложении, такие как присутствие строки состояния, могут также заставить кадр изменяться. Когда кадр представления изменяется, из-за этого Ваш контроллер представления должен быть подготовлен скорректировать содержание своего представления.

Окно устанавливает кадр своего корневого представления контроллера представления

Представление, связанное с корневым контроллером представления окна, получает кадр на основе характеристик окна. Кадр, установленный окном, может измениться на основе многих факторов:

Если Ваши отображения приложения строка состояния, представление уменьшается так, чтобы это не делало underlap строка состояния. В конце концов, если строка состояния непрозрачна, нет никакого способа видеть или взаимодействовать с содержанием, лежащим под нею. Однако, если Ваши отображения приложения полупрозрачная строка состояния, можно установить значение контроллера представления wantsFullScreenLayout свойство к YES позволить Вашему представлению быть выведенным на экран полным экраном. Строка состояния нарисована поверх представления.

Когда Вы хотите максимизировать сумму пространства, доступного для отображения Вашего содержания, полный экран полезен. При отображении содержания под строкой состояния, место, которое просматривает содержание в прокрутке так, чтобы пользователь мог прокрутить его из-под строки состояния. Способность прокрутить Ваше содержание важна, потому что пользователь не может взаимодействовать с содержанием, расположенным позади строки состояния или любых других полупрозрачных представлений (таких как полупрозрачные панели навигации и панели инструментов). Панели навигации автоматически добавляют вставку содержания прокрутки к Вашему представлению прокрутки (предполагающий, что это - корневое представление Вашего контроллера представления) составлять высоту панели навигации; иначе, необходимо вручную изменить contentInset свойство Вашего представления прокрутки.

Контейнер устанавливает кадры своих детских представлений

Когда контроллер представления является дочерним элементом контейнерного контроллера представления, его родитель решает, какие дочерние элементы видимы. Когда это хочет показать представление, это добавляет его как подпредставление в его собственной иерархии представления и устанавливает его кадр для вмещения его в его пользовательский интерфейс. Например:

Дочерний элемент получает его кадр от родителя полностью до корневого контроллера представления, получающего его кадр от окна.

Представленный контроллер представления использует контекст представления

То, когда контроллер представления представлен другим контроллером представления, кадр, который это принимает, основывается на контексте представления, раньше выводило на экран контроллер представления. Посмотрите, что Контексты Представления Обеспечивают область, Покрытую Представленным Контроллером Представления.

Контроллер легкой сдобы устанавливает размер выведенного на экран представления

Контроллер представления, выведенный на экран контроллером легкой сдобы, может определить размер области своего представления путем установки его собственного contentSizeForViewInPopover значение свойства к размеру это хочет. Если контроллер легкой сдобы устанавливает свое собственное popoverContentSize свойство к размеру другого представления, его значение размера переопределяет установку контроллера представления. Для соответствия модели, используемой другими контроллерами представления, используйте свойства контроллера легкой сдобы для управления его размером и позицией.

Как контроллеры представления участвуют в процессе создания макета представления

Когда размер представления изменения представления контроллера, его подпредставления изменены местоположение для адаптации новому пространству, доступному им. Представления в иерархии представления контроллера выполняют большую часть из этого, работают сами с помощью масок автоизменения размеров и ограничений макета. Однако контроллер представления также вызывают в различных точках так, чтобы он мог участвовать в процессе. Вот то, что происходит:

  1. Представление контроллера представления изменено к новому размеру.

  2. Если авторасположение не используется, представления изменены согласно их маскам автоизменения размеров.

  3. Контроллер представления viewWillLayoutSubviews метод вызывают.

  4. Представление layoutSubviews метод вызывают. Если авторасположение используется для конфигурирования иерархии представления, оно обновляет ограничения макета путем выполнения следующих шагов:

    1. Контроллер представления updateViewConstraints метод вызывают.

    2. UIViewController реализация класса updateViewConstraints вызовы метода представление updateConstraints метод.

    3. После того, как ограничения макета обновляются, новое расположение вычисляется, и представления изменены местоположение.

  5. Контроллер представления viewDidLayoutSubviews метод вызывают.

Идеально, сами представления выполняют всю необходимую работу, чтобы изменить местоположение себя, не требуя, чтобы контроллер представления участвовал в процессе вообще. Часто, можно сконфигурировать расположение полностью в Интерфейсном Разработчике. Однако, если контроллер представления добавляет и удаляет представления динамично, статическое расположение в Интерфейсном Разработчике может не быть возможным. В этом случае контроллер представления является хорошим местом для управления процессом, потому что часто сами представления только имеют ограниченное изображение других представлений в сцене. Вот лучшие подходы к этому в Вашем контроллере представления: