Как мы определяем ориентацию приложения в iOS 8?

В iOS 7 мы сказали:

// ViewController1: -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } -(BOOL)shouldAutorotate { return YES; } // ViewController2, presented by modal segue from button in ViewController1 -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } -(BOOL)shouldAutorotate { return YES; } 

В результате приложение появилось в ландшафтном представлении controllerа 1 и в портрете в виде controllerа 2.

Этот код отлично работает в iOS 7, включая iOS 7-симуляторы в Xcode 6. Но он больше не работает в iOS 8. Есть две проблемы:

  • View View Controller 1 выглядит в ландшафте, но симулятор не поворачивается автоматически (может быть, это просто симуляторная ошибка) и (это действительно важная часть), вид не изменяется автоматически, поэтому он слишком узкий для экрана ( с правой стороны есть большая черная область).

  • Вид controllerа 2 выглядит в той же ориентации, что и просмотр controllerа 1 (пейзаж, а не портрет).

Таким образом, просмотр представлений controllerа не изменяется автоматически для заполнения экрана, а поддерживаемые ориентации controllerа просмотра не выполняются.

Итак, как мы должны это делать сейчас? Это связано с коллекциями признаков? С предпочтительным размером контента? С настройкой ориентации строки состояния вручную?

Ответ на часть первая (запуск в ландшафт) не изменился с iOS 7: все зависит от порядка возможных ориентаций в файле Info.plist. Итак, предположим, что View Controller 1 говорит следующее:

 -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } 

Затем мы будем последовательно внедряться в ландшафт, если ориентация ландшафта ориентирована на ориентированные на Info.plist ориентации интерфейса:

 UISupportedInterfaceOrientations  UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait  

Одно примечательное изменение в iOS 8 состоит в том, что по умолчанию строка состояния скрыта, когда мы находимся в ландшафте. Но вы можете предотвратить это, при желании, с соответствующим переопределением:

 -(BOOL)prefersStatusBarHidden { return NO; } 

Это не отвечает на вторую часть моего вопроса, а именно, как заставить rotation при представлении controllerа вида. Как я объяснил в этом ответе , я считаю, что это станет невозможным в iOS 8. Ожидается, что ваш controller просмотра и ваши взгляды будут «адаптироваться» – и вы тоже.

EDIT: Похоже, что в семени 4 возможность принудительного поворота приложения на представлении / увольнении диспетчера представлений возвращается!

Вероятно, проблема в вашем файле * .plist

Проверьте, что вы хотите, чтобы указать ориентацию по умолчанию / первый запуск для экрана, как

Поддерживаемые интерфейсные интерфейсы:

item 0 Пейзаж (правая кнопка дома)

Элемент 1 Портрет (нижняя кнопка дома)

Эта «ошибка» я преследовал за несколько дней до того, как я, наконец, проверил работу UIInterface в глобальном поиске в Xcode и заметил, что у меня были ориентиры, которые моя игра не поддерживает (вся игра – 100%

Я избавился от Landscape Left, который стал причиной запуска GameCenter в альбомный альбом Left Left, если физически удерживать устройство в альбомной ориентации слева.

Задача решена.

  • didFailToReceiveAdWithError не работает для симуляторов iOS 8
  • iOS 8 Снимок снимка, который не был отображен, приводит к созданию пустого моментального снимка
  • Ошибка модуля сборки iOS8 для Facebook для FBSDKCoreKit
  • Как интегрировать заставку для всех типов iPhone в XCode 6.1?
  • Ошибка UIActivityViewController на iOS 8 iPads
  • UIMoviePlayerControllerDidEnterFullscreenNotification не работает в iOS8
  • Какова точка входа быстрого выполнения кода?
  • Класс размера для iPad-портрета и ландшафтных режимов
  • -webkit-overflow-scrolling: touch; перерывы в iOS8 от Apple
  • Adaptive segue в раскадровке Xcode 6. Неужели устал?
  • ios симулятор появляется с UDID в xcode 6
  • Давайте будем гением компьютера.