Принудительное вращение UIViewController в NavigationController в TabbarController - PullRequest
0 голосов
/ 25 ноября 2011

Моя иерархия просмотра настроена следующим образом.

UITabBarController
    |
    UINavigationController
    |  |
    |  UIViewController
    |
    UINavigationController
       |
       UIViewController

Дело в том, что у меня есть ViewController, который отображается только в книжной ориентации, как только я переворачиваю устройство в горизонтальную плоскость, другой ViewController выдвигается сверху, который работает так, как задумано.

Теперь мне нужно, чтобы, как только я нажал кнопку «Назад» на недавно подключенном ViewController, старый ViewController был переведен в «Портрет», даже если устройство все еще находится в альбомной ориентации.
Я пытался сделать это с переходами, но затем другие виды становятся испорченными и перестают правильно распознавать ориентацию, что приводит к путанице смещенных видов.

Ответы [ 3 ]

2 голосов
/ 25 апреля 2012

Единственное, что мне помогло, - это использовать

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

в моем ViewController и представить его с presentModalViewController .Это заставляет Вид оставаться в пейзаже.Не совсем то, что я хотел, но все получилось.

1 голос
/ 08 июня 2012

Приведенный ниже код переведет представление в альбомный режим, но только в том случае, если родительский контроллер представления поддерживает альбомный режим.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

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

1 голос
/ 25 ноября 2011

Попробуйте добавить это в свой оригинальный контроллер вида:

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

Это должно заставить его отображаться только в портретной ориентации.

...