Ориентация запуска iPad не определена
У меня есть приложение для iPad, которое работает правильно, за исключением странной проблемы во время запуска. Я прочитал несколько вопросов и ответов, касающихся ориентации, но это все равно поставило меня в тупик.
Контроллер корневого представления - это UITabBarController с 3 вкладками. Две вкладки имеют собственные контроллеры представления (одна на основе UIViewController, другая на UITableViewController), и обе страдают от этой проблемы ориентации запуска. Третья вкладка - это пользовательский UITableViewController, который встроен в UINavigationController.
ОК, вот в чем проблема. Если я запускаю приложение в книжной ориентации, все отлично работает. Если я запускаю его в альбомной ориентации, 3-я вкладка работает отлично. Однако первые 2 вкладки отображаются в книжной ориентации, хотя:
- Ориентация строки состояния правильно отображается в виде пейзажа (разбросано по экрану).
- Вид панели вкладок корректно отображается в виде пейзажа с центрированными вкладками.
- Все представления возвращают 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 выглядят кэшированными и / или не обновляются при установке приложение. То есть добавление ключа выше и установка и запуск приложения в симуляторе не дали никакого эффекта. Однако удаление приложения из симулятора устранило проблему, и недавно установленное приложение вело себя так, как указано.