Ориентация запуска iPad не определена - PullRequest
2 голосов
/ 27 апреля 2010

У меня есть приложение для 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 ]

3 голосов
/ 27 мая 2010

Вы должны добавить поддерживаемыеDeviceOrientations в свой «myApp.plist».

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

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

1 голос
/ 27 сентября 2012

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

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

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

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

1 голос
/ 10 сентября 2010

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

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        return YES;
}
0 голосов
/ 10 февраля 2011

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

[myViewController viewDidLoad];

При необходимости это вызовет метод shouldAutorotateToInterfaceOrientation: *. 1004 *

0 голосов
/ 14 октября 2010

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

UISupportedInterfaceOrientation

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

  • UIInterfaceOrientationPortrait
  • UIInterfaceOrientationPortraitUpsideDown
  • UIInterfaceOrientationLandscapeLeft
  • UIInterfaceOrientationLandscapeRight

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

0 голосов
/ 16 сентября 2010

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

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