Как мы определяем ориентацию приложения в 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. Есть две проблемы:
- Как загрузить URL-адрес в UIWebView в Swift?
- Каталог документов Путь к бета-симулятору iOS 8
- NSURL от PHAsset
- Переход на WKWebView
- Ошибка UIActivityViewController на iOS 8 iPads
-
View View Controller 1 выглядит в ландшафте, но симулятор не поворачивается автоматически (может быть, это просто симуляторная ошибка) и (это действительно важная часть), вид не изменяется автоматически, поэтому он слишком узкий для экрана ( с правой стороны есть большая черная область).
-
Вид controllerа 2 выглядит в той же ориентации, что и просмотр controllerа 1 (пейзаж, а не портрет).
Таким образом, просмотр представлений controllerа не изменяется автоматически для заполнения экрана, а поддерживаемые ориентации controllerа просмотра не выполняются.
Итак, как мы должны это делать сейчас? Это связано с коллекциями признаков? С предпочтительным размером контента? С настройкой ориентации строки состояния вручную?
- Какова самая большая разница между NSURLConnection и NSURLSession
- Ошибка домена = NSURLErrorDomain Code = -1005 «Сетевое соединение было потеряно».
- Как получить консоль устройства в Xcode6?
- Проблема автосохранения кадра UICollectionViewCell contentView в ячейке прототипа Storyboard (Xcode 6, iOS 8 SDK) происходит при запуске только на iOS 7
- Как получить URL-адрес ALAsset из PHAsset?
- Определите, установлен ли доступ к библиотеке фотографий или нет - PHPhotoLibrary
- Как проверить «Разрешить полный доступ» в iOS 8?
- Использование Cocoapods с расширением приложения
Ответ на часть первая (запуск в ландшафт) не изменился с 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, если физически удерживать устройство в альбомной ориентации слева.
Задача решена.