Как разрешить определенному контроллеру просмотра поддерживать как ландшафтную, так и портретную ориентацию

Мое приложение – приложение на основе навигации, поддерживающее iOS 6. За исключением контроллера просмотра, все остальные будут поддерживать только портретный режим. Отдельный контроллер просмотра должен поддерживать как ландшафт, так и портретную ориентацию.

Я искал много вопросов для этого, но ни один из ответов не подходит для меня. Если кто-то знает, любезно посоветуйте мне

Я установил ориентацию как Portait в Project -> Targetets -> Summary -> Поддерживаемая ориентация

Сначала вы должны использовать методы для iOS6, представленные в документации UIViewController, если вы создаете приложение для iOS6. Метод ориентации, такой как shouldAutorotateToInterfaceOrientation , устарел в iOS6, альтернативный метод для iOS6 – shouldAutoRotate . Вы должны использовать только старый метод, если ваше приложение поддерживает также iOS5.

Второй Если вы используете UINavigationcontroller в своем приложении, и вам нужно иметь разные ориентации интерфейса, тогда navigationController может испортить ориентацию интерфейса в приложении. Возможное решение (работающее для меня) – реализовать пользовательский UINavigationController и переопределить методы ориентации интерфейса в этом пользовательском классе UINavigationController , это заставит ваш viewControllers вращаться в соответствии с установленной вами ориентацией, потому что ваши контроллеры выталкиваются из UINavigationController . Не забудьте также добавить эти методы в свой конкретный viewController.

CustomNavigationController.h

 @interface CustomNavigationController : UINavigationController @end 

CustomNavigationController.m

 @implementation CustomNavigationController //overriding shouldRotate method for working in navController -(BOOL)shouldAutorotate { return [self.topViewController shouldAutorotate]; } -(NSUInteger)supportedInterfaceOrientations { return [self.topViewController supportedInterfaceOrientations]; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return [self.topViewController preferredInterfaceOrientationForPresentation]; } 

Я действительно думаю, что правильный способ сделать это – установить как пейзаж, так и портрет в качестве поддерживаемых ориентаций, а также не позволять изменять ориентацию на ВК, которую вы не хотите вращать, вернув NO на

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

если ориентация, переданная методу, не должна поддерживаться.

Как уже упоминалось в комментариях, этот метод больше не может быть использован. Вы должны использовать:

 -(BOOL) shouldAutorotate 

И узнать текущую ориентацию внутри этой функции и вернуть НЕТ, если вы не хотите вращаться.

Не забудьте разрешить вашему приложению разные ориентации!

иначе ничего выше не будет работать

Установите его в цель проекта в разделе «Общие» в разделе «Сведения о развертывании»:

введите описание изображения здесь

  • Первый UIView в портретной ориентации и второй в ландшафте
  • Определение ориентации экрана, а не ориентации устройства
  • Segue заставляет UITabBarController перемещать строку состояния в Swift?
  • Приложение разбилось из-за InterfaceOrientation
  • как обеспечить только один вид с ландшафтом для MPMoviePlayerController в IOS6
  • Модальный просмотр. Сила контроллера. Ландшафтная ориентация в iOS 6
  • iOS - различные ориентации экрана для разных контроллеров вида
  • Как повернуть представление в контроллере, которому не разрешено вращать его интерфейс?
  • Принудительное изменение ориентации иногда не работает
  • как бороться с UIDeviceOrientationFaceUp и UIDeviceOrientationFaceDown?
  • Строка состояния скрывается, когда контроллер просмотра только для ландшафта представлен поверх контроллера просмотра только для портрета
  • Давайте будем гением компьютера.