Изменение размеров представлений контроллера представления
Контроллер представления владеет своим собственным представлением и управляет содержанием представления. В процессе, контроллер представления также управляет подпредставлениями представления. Но в большинстве случаев, кадр представления не установлен непосредственно контроллером представления. Вместо этого кадр представления определяется тем, как представление контроллера представления выведено на экран. Более непосредственно это сконфигурировано объектом, используемым для отображения его. Другие условия в приложении, такие как присутствие строки состояния, могут также заставить кадр изменяться. Когда кадр представления изменяется, из-за этого Ваш контроллер представления должен быть подготовлен скорректировать содержание своего представления.
Окно устанавливает кадр своего корневого представления контроллера представления
Представление, связанное с корневым контроллером представления окна, получает кадр на основе характеристик окна. Кадр, установленный окном, может измениться на основе многих факторов:
Кадр окна
Видима ли строка состояния
Показывает ли строка состояния дополнительную переходную информацию (такой как тогда, когда телефонный вызов происходит),
Ориентация пользовательского интерфейса (среда или портрет)
Значение сохранено в корневом контроллере представления
wantsFullScreenLayout
свойство
Если Ваши отображения приложения строка состояния, представление уменьшается так, чтобы это не делало underlap строка состояния. В конце концов, если строка состояния непрозрачна, нет никакого способа видеть или взаимодействовать с содержанием, лежащим под нею. Однако, если Ваши отображения приложения полупрозрачная строка состояния, можно установить значение контроллера представления wantsFullScreenLayout
свойство к YES
позволить Вашему представлению быть выведенным на экран полным экраном. Строка состояния нарисована поверх представления.
Когда Вы хотите максимизировать сумму пространства, доступного для отображения Вашего содержания, полный экран полезен. При отображении содержания под строкой состояния, место, которое просматривает содержание в прокрутке так, чтобы пользователь мог прокрутить его из-под строки состояния. Способность прокрутить Ваше содержание важна, потому что пользователь не может взаимодействовать с содержанием, расположенным позади строки состояния или любых других полупрозрачных представлений (таких как полупрозрачные панели навигации и панели инструментов). Панели навигации автоматически добавляют вставку содержания прокрутки к Вашему представлению прокрутки (предполагающий, что это - корневое представление Вашего контроллера представления) составлять высоту панели навигации; иначе, необходимо вручную изменить contentInset
свойство Вашего представления прокрутки.
Контейнер устанавливает кадры своих детских представлений
Когда контроллер представления является дочерним элементом контейнерного контроллера представления, его родитель решает, какие дочерние элементы видимы. Когда это хочет показать представление, это добавляет его как подпредставление в его собственной иерархии представления и устанавливает его кадр для вмещения его в его пользовательский интерфейс. Например:
Контроллер представления вкладки резервирует пространство у основания своего представления для панели вкладок. Это устанавливает представление в настоящее время видимого дочернего элемента для использования остатка от пространства.
Контроллер представления навигации резервирует пространство наверху для панели навигации. Если в настоящее время видимый дочерний элемент хочет, чтобы панель навигации была выведена на экран, она также помещает представление внизу экрана. Остаток от его представления дан дочернему элементу для заполнения.
Дочерний элемент получает его кадр от родителя полностью до корневого контроллера представления, получающего его кадр от окна.
Представленный контроллер представления использует контекст представления
То, когда контроллер представления представлен другим контроллером представления, кадр, который это принимает, основывается на контексте представления, раньше выводило на экран контроллер представления. Посмотрите, что Контексты Представления Обеспечивают область, Покрытую Представленным Контроллером Представления.
Контроллер легкой сдобы устанавливает размер выведенного на экран представления
Контроллер представления, выведенный на экран контроллером легкой сдобы, может определить размер области своего представления путем установки его собственного contentSizeForViewInPopover
значение свойства к размеру это хочет. Если контроллер легкой сдобы устанавливает свое собственное popoverContentSize
свойство к размеру другого представления, его значение размера переопределяет установку контроллера представления. Для соответствия модели, используемой другими контроллерами представления, используйте свойства контроллера легкой сдобы для управления его размером и позицией.
Как контроллеры представления участвуют в процессе создания макета представления
Когда размер представления изменения представления контроллера, его подпредставления изменены местоположение для адаптации новому пространству, доступному им. Представления в иерархии представления контроллера выполняют большую часть из этого, работают сами с помощью масок автоизменения размеров и ограничений макета. Однако контроллер представления также вызывают в различных точках так, чтобы он мог участвовать в процессе. Вот то, что происходит:
Представление контроллера представления изменено к новому размеру.
Если авторасположение не используется, представления изменены согласно их маскам автоизменения размеров.
Контроллер представления
viewWillLayoutSubviews
метод вызывают.Представление
layoutSubviews
метод вызывают. Если авторасположение используется для конфигурирования иерархии представления, оно обновляет ограничения макета путем выполнения следующих шагов:Контроллер представления
updateViewConstraints
метод вызывают.UIViewController
реализация классаupdateViewConstraints
вызовы метода представлениеupdateConstraints
метод.После того, как ограничения макета обновляются, новое расположение вычисляется, и представления изменены местоположение.
Контроллер представления
viewDidLayoutSubviews
метод вызывают.
Идеально, сами представления выполняют всю необходимую работу, чтобы изменить местоположение себя, не требуя, чтобы контроллер представления участвовал в процессе вообще. Часто, можно сконфигурировать расположение полностью в Интерфейсном Разработчике. Однако, если контроллер представления добавляет и удаляет представления динамично, статическое расположение в Интерфейсном Разработчике может не быть возможным. В этом случае контроллер представления является хорошим местом для управления процессом, потому что часто сами представления только имеют ограниченное изображение других представлений в сцене. Вот лучшие подходы к этому в Вашем контроллере представления:
Используйте ограничения макета для автоматического расположения представлений (iOS 6 и позже). Вы переопределяете
updateViewConstraints
добавить любые необходимые ограничения макета, не уже сконфигурированные представлениями. Ваша реализация этого метода должна вызвать[super updateViewConstraints]
.Для получения дополнительной информации об ограничениях макета посмотрите Автоматическое Руководство по Расположению.
Используйте комбинацию автоизменения размеров масок и кода для ручного расположения представлений (iOS 5.x). Вы переопределяете
layoutSubviews
и используйте его, чтобы изменить местоположение любых представлений, позиции которых не могут быть установлены автоматически с помощью изменения размеров масок.Для получения дополнительной информации о свойствах автоизменения размеров представлений и как они влияют на представление, см. Руководство по программированию Представления для iOS.