Контроллер iOS View смещается после поворота - PullRequest
4 голосов
/ 27 ноября 2010

Я работаю над приложением для iOS. Мой представитель приложения загружает мой контроллер представления в окно и отображает его правильно, за исключением одного предупреждения: представления на моем контроллере представления расположены недостаточно далеко по оси Y, а строка состояния обрезает мой вид сверху. Я изменил файл XIB моего контроллера вида, чтобы приспособиться к этому, так что теперь все мои виды начинаются на 20 пикселей вниз по оси Y. При начальной загрузке все выглядит нормально. Когда я поворачиваюсь, мои виды на 20 пикселей ниже, чем они должны быть (из-за изменения компоновки для размещения первой загрузки). Что меня интересует, так это то, как лучше обрабатывать позиционирование в контроллере представления для обработки высоты строки состояния.

Ответы [ 2 ]

1 голос
/ 04 марта 2011

Я справился с этой проблемой, не отображая представление непосредственно / программно в окно. Вместо этого я создаю RootViewController, который правильно размещается и выравнивается в обеих ориентациях и имеет все другие виды внутри RootViewController.

Причина, по которой это происходит, заключается в том, что окно приложения всегда занимает весь экран (включая строку состояния вверху). Если вы попытаетесь заполнить окно, вам придется иметь дело с строкой состояния и компенсировать другой хром. Облегчает, если вы управляете всеми представлениями внутри корневого представления.

0 голосов
/ 25 апреля 2011

Ваше решение зависит от того, как вы создали проект.

Если вы использовали шаблон приложения на основе представления при создании проекта, то ваш контроллер представления будет находиться в MainWindow.xib. Ваш контроллер представления должен работать правильно как при запуске (при запуске), так и после вращения устройств, при условии, что у вас включен атрибут строки состояния (т. Е. Выбран серый или черный) для контроллера представления в этом NIB.

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

myViewController.view.frame = window.screen.applicationFrame;

, который каким-то волшебным образом настраивает вещи правильно.

...