Ориентация запуска iPad не определена

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

Контроллер корневого представления - это UITabBarController с 3 вкладками. Две вкладки имеют собственные контроллеры представления (одна на основе UIViewController, другая на UITableViewController), и обе страдают от этой проблемы ориентации запуска. Третья вкладка - это пользовательский UITableViewController, который встроен в UINavigationController.

ОК, вот в чем проблема. Если я запускаю приложение в книжной ориентации, все отлично работает. Если я запускаю его в альбомной ориентации, 3-я вкладка работает отлично. Однако первые 2 вкладки отображаются в книжной ориентации, хотя:

  1. Ориентация строки состояния правильно отображается в виде пейзажа (разбросано по экрану).
  2. Вид панели вкладок корректно отображается в виде пейзажа с центрированными вкладками.
  3. Все представления возвращают YES для shouldAutorotateToInterfaceOrientation для всех ориентаций.

Если я вызываю [self interfaceOrientation] или [[UIApplication sharedApplication] statusBarOrientation] в viewWillAppear контроллера представления, то контроллер представления 3-ей вкладки сообщает 3 (альбомная ориентация), но первые два контроллера представления отображают 1 (портрет), даже если строка состояния явно пейзаж!

Если я поверну iPad в книжную ориентацию и вернусь в альбомную ориентацию, то все 3 вкладки повернутся правильно (и приведенные выше методы вернут 3, как и ожидалось).

Кроме того, если я нажму на любую другую вкладку, а затем вернусь на вкладку № 1 или № 2, то они теперь будут вращаться правильно, даже без вращения самого iPad!

Что мне не хватает?

6 ответов

Вы должны добавить supportDeviceOrientations в свой "myApp.plist" .

Нажмите на этот список, добавьте ключ "Поддерживаемые ориентации интерфейса" и добавьте поддерживаемые ориентации интерфейса. Это решило проблему для меня.

Для получения дополнительной информации перейдите по этой ссылке и перейдите в раздел "Комплект приложений": http://developer.apple.com/iphone/library/documentation/General/Conceptual/iPadProgrammingGuide/CoreApplication/CoreApplication.html

Я наконец нашел свой ответ: я просто забыл это в моем LoadingController.

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

Я обнаружил, что ориентация устройства начинается с нуля. И должен вернуть ДА за Неизвестный. Это позволит ему ориентировать устройство с правильной ориентацией запуска.

Вот код, который я использовал для распространения этого сообщения до устаревших сообщений.

- (BOOL)shouldAutorotate{
    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
    if (orientation == UIDeviceOrientationUnknown) return YES;
    BOOL result = [self shouldAutorotateToInterfaceOrientation:orientation];
    return result;
}

обратите внимание, я возвращаю ДА, если Ориентация == UIDeviceOrientationUnknown. Это исправило мою проблему с загрузкой.

Просто попробуй это

- (BOOL)shouldAutorotateToInterfaceOrientation: UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown);<br>
}

В методе applicationDidFinishLaunchingWithOptions делегата вашего приложения после добавления представления контроллера представления в окно добавьте следующее:

[myViewController viewDidLoad];

Если необходимо, это вызовет вызов метода shouldAutorotateToInterfaceOrientation:.

Решение состоит в том, чтобы добавить ключ

UISupportedInterfaceOrientation

Вам Info.plist с массивом строк, определяющих поддерживаемые ориентации интерфейса во время запуска, это

  • UIInterfaceOrientationPortrait
  • UIInterfaceOrientationPortraitUpsideDown
  • UIInterfaceOrientationLandscapeLeft
  • UIInterfaceOrientationLandscapeRight

Однако есть следующая проблема, которая может привести к путанице: по крайней мере, с SDK 3.2 и iPad Simulator из XCode 3.2.4 я обнаружил, что (по крайней мере, некоторые) настройки Info.plist выглядят кэшированными и / или не обновляются при установке приложение. То есть добавление ключа выше и установка и запуск приложения в симуляторе не дали никакого эффекта. Однако удаление приложения из симулятора устранило проблему, и недавно установленное приложение вело себя так, как указано.

Другие вопросы по тегам