Разрешить одно представление для поддержки нескольких ориентаций, в то время как другие не iPhone - PullRequest
2 голосов
/ 20 апреля 2011

У меня есть ситуация, когда у меня есть несколько видов, контролируемых с помощью UITabBarController.Один из этих видов контролируется через UINavigationController.Приложение должно поддерживать только Портрет для всех видов ... кроме одного одиночного вида.Это представление помещается в стек контроллера навигации и должно допускать как книжную, так и альбомную ориентацию.

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

Кто-нибудь решил эту проблему чистым способом?

Ответы [ 4 ]

3 голосов
/ 20 апреля 2011

Контроллер представления, который вы представляете, используя presentModalViewController ИЛИ pushViewController, должен поддерживать любую ориентацию, используя этот метод:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

С помощью этого метода, когда вы представляете свой контроллер в альбомной ориентации, он также будет корректно отображаться в альбомной ориентации.

1 голос
/ 20 апреля 2011

Если у вас есть навигация внутри панели вкладок, тогда единственный вариант - представить конкретный вид в виде модального вида (панель вкладок требует, чтобы все виды поддерживали ориентацию для автоматического поворота).Таким образом, в основном единственный контроллер представления, которому необходим ландшафт, должен реализовать

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
      if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
          // Create the landscape version of the view and present it modally
      }

      return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

Затем отклонить модальное представление в том же методе контроллера модального представления, обнаружив портретную ориентацию и используя метод для родителя [self.parentViewController dismissModalViewControllerAnimated: animated]

1 голос
/ 20 апреля 2011

У меня была такая же проблема.Вы должны реализовать shouldAutorotateToInterfaceOrientation: для вашего UITabBarController и вернуть YES для всех ориентаций, которые вы хотите поддерживать на всех ваших контроллерах представления.И в том же методе для всех других контроллеров представления возвращайте YES только для ориентаций, которые вы хотите поддерживать в каждом из этих контроллеров представления.

Чтобы реализовать shouldAutorotateToInterfaceOrientation: для вашего UITabBarController, вы можете создать подкласс UITabBarController, ноболее простой способ - реализовать категорию в UITabBarController и просто реализовать этот метод:

@implementation UITabBarController(orientation)

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toOrientation
{
    return YES; // or whatever you need
}

@end

Примечание: напечатано в веб-браузере;не скомпилировано.: -)

Вы можете поместить это правильно в файл делегата приложения .m в конце.

Я обнаружил, что UITabBarController возвращает YES только для портрета, что, очевидно, также влияет на всех подчиненных.просмотр контроллеров.В моем случае у меня был один подчиненный контроллер вида, который я хотел поддерживать как книжный, так и альбомный, и это решило его.

0 голосов
/ 21 декабря 2012

Для iOS-6, я сделал это, он работает очень

(NSUInteger)supportedInterfaceOrientations
{ 
    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft;
}

(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{ 
    return UIInterfaceOrientationLandscapeLeft;
}

Это тебе поможет ....

...