Приложение iPad landscape запускает контроллер корневого представления с портретным измерением - PullRequest
3 голосов
/ 21 марта 2012

Я настроил новый проект iPad для поддержки только UIInterfaceOrientationLandscapeRight.

В моем делегате приложения я добавляю RootViewController к rootViewController окна.

В этом UIViewController (RootViewController) у меня есть следующее:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

Я также пробовал:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

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

Если я вывожу self.view.frame для моего контроллера представления, я получу {{0, 0}, {768, 1024}}, но вместо этого я бы хотел {1024, 768}.Если я не могу определить правильные размеры, чтобы я мог создавать свои представления с учетом этих соображений?

Извините, если об этом спрашивали миллиард раз, я просмотрел множество SO вопросов, но ничего не решилмоя проблема.

Ответы [ 3 ]

5 голосов
/ 30 ноября 2012

Я столкнулся с той же проблемой, и то, что Эш Ферроу сказал выше, кажется правильным; ориентация устанавливается после вызова viewDidLoad.

Я создавал приложение для iPad, которое работает во всех ориентациях, но в моем корневом UIViewController правильно настраивались только портретные ориентации. Чтобы правильно расположить виды в альбомной ориентации, я должен был убедиться, что маски авторазмера во всех моих подпредставлениях были настроены так, чтобы вид мог приспосабливаться к ландшафту за кулисами, прежде чем отображаться пользователю.

Например, у меня был UIImageView того же размера, что и UIView UIViewController. Для правильной настройки при повороте на ландшафт:

UIImageView *backgroundImageView = [[UIImageView alloc] initWithFrame:self.view.bounds];    
backgroundImageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight);
[self.view addSubview:backgroundImageView];

Теперь UIViewController можно настроить в книжной ориентации в методе viewDidLoad и повернуть в портретную ориентацию, прежде чем отобразить его пользователю.

1 голос
/ 21 марта 2012

РЕДАКТИРОВАТЬ:

Похоже, что ориентация интерфейса уже установлена ​​в viewDidLoad

p (UIInterfaceOrientation)[self interfaceOrientation]
(UIInterfaceOrientation) $1 = UIInterfaceOrientationLandscapeRight

Вот моя теория: интерфейсы на iPad, по умолчанию, 1024x768, если они имеютстрока состояния, которая у вас.Я считаю, что, несмотря на правильную ориентацию интерфейса, он не обновляет геометрию вида до тех пор, пока viewDidLoad.Я считаю, что для этого есть очень веская причина.

Если вы посмотрите на UIViewController Жизненный цикл документы, viewDidLoad вызывается как часть настройки контроллера представления, После представление загружается, вызывается willAnimateRotationToInterfaceOrientation: duration:, чтобы сообщить контроллеру представления, что его геометрия меняется.

Это не столько ответ, сколько объяснение.Надеемся, что это поможет вам разработать решение, которое поможет обойти эту проблему.

Начните ответ, который на самом деле не работает:

В info.plist для вашего проекта откройте «Поддерживаемые ориентации интерфейса».msgstr "выберите и удалите ориентации интерфейса, которые вы не хотите поддерживать.По умолчанию поддерживаются все:

Supported Interface Orientations

Это должно очистить его.

0 голосов
/ 18 октября 2012

У меня есть простое решение: шаблоны приложений Apple по умолчанию работают с XIB для контроллера основного вида.Чтобы решить вашу проблему, просто откройте главный контроллер вида XIB и установите ориентацию на «ландшафт».

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

...