Как мы определяем ориентацию приложения в 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, если физически удерживать устройство в альбомной ориентации слева.

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

  • Xcode 6 iOS Создание Cocoa Touch Framework - проблемы с архитектурой
  • Библиотека iOS для BitCode
  • didFailToReceiveAdWithError не работает для симуляторов iOS 8
  • Пользовательская клавиатура iOS 8: изменение высоты
  • Класс размера для iPad-портрета и ландшафтных режимов
  • filterArrayUsingPredicate не существует в быстром массиве
  • Xcode 6 позволяет объектам VECTOR image ... любой идеи, как их использовать?
  • NSRange для диапазона
  • Ошибка модуля сборки iOS8 для Facebook для FBSDKCoreKit
  • iOS 8 Снимок снимка, который не был отображен, приводит к созданию пустого моментального снимка
  • Какова точка входа быстрого выполнения кода?
  • Interesting Posts

    Как работают servlets? Создание, сеансы, общие переменные и multithreading

    Как запустить скрипт при входе / выходе в OS X?

    Получение IP-адреса клиента в WCF 3.0

    определять интервалы последовательных целых последовательностей

    Краткое объяснение Async / Await в .Net 4.5

    C ++: почему pass-by-value обычно более эффективен, чем pass-by-reference для встроенных (то есть C-подобных) типов

    В Internet Explorer 10 Metro, как вы меняете домашнюю страницу?

    Создайте матрицу диаграмм рассеяния (пар () эквивалентных) в ggplot2

    Поток файла с использованием ASP.NET MVC FileContentResult в браузере с именем?

    пример переполнения буфера из книги Art of Exploitation

    Почему LayoutInflater игнорирует параметры layout_width и layout_height, которые я указал?

    почему Enforce HTTPS принудительно установлен как ДА?

    WebGL недоступен в Chrome; «Chrome: // gpu» говорит: «Процесс GPU не смог загрузиться»

    Как я могу читать / передавать файл без загрузки всего файла в память?

    Как проверить, не является ли IOException типом Not-Enough-Disk-Space-Exception?

    Давайте будем гением компьютера.