Фактическое название для этого вопроса длиннее, чем я могу поместиться:
Запуск приложения, чей контроллер корневого представления поддерживает только портретную ориентацию, но в противном случае поддерживает ландшафтные ориентации на iPhone 6 Plus, в то время как домашний экран находится в альбомной ориентации, приводит к состоянию неопределенности, когда окно приложения находится в альбомной ориентации, но устройство находится в портретной ориентации.
Короче говоря, это выглядит так:
Когда он должен выглядеть следующим образом:
Шаги по воспроизведению:
-
iPhone 6 Plus работает под управлением iOS 8.0.
-
Приложение, чей plist поддерживает ориентацию "все-но-портрет-вверх-вниз".
-
Контроллер корневого представления приложения является UITabBarController.
-
Все, контроллер панели вкладок и все его дочерние контроллеры дочерних представлений возвращают
UIInterfaceOrientationMaskPortrait
изsupportedInterfaceOrientations
. -
На начальном экране iOS.
-
Поворот в альбомную ориентацию (требуется iPhone 6 Plus).
-
Холодный запуск приложения.
-
Результат: разбитые ориентации интерфейса.
Я не могу думать о другом способе обеспечения ориентации на портреты, кроме как отключить ландшафт вообще, чего я не могу сделать: нашим диспетчерам модального просмотра веб-браузера нужен пейзаж.
Я даже попробовал подклассифицировать UITabBarController и переопределить supportInterfaceOrientations, чтобы вернуть маску только для портрета, но это (даже со всеми другими шагами выше) не устранило проблему.
Здесь ссылка на пример проекта, показывающий ошибку.