Проблема pushViewController из Пейзаж в Портрет - PullRequest
5 голосов
/ 28 января 2011

Я пытаюсь перейти от viewcontroller, который поддерживает альбомную ориентацию (в то время как в ландшафтном режиме), к той, которая явно не (и не должна) поддерживать ландшафт.Я делаю это следующим образом:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}

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

Мое единственное предположение, что Apple не хочет, чтобы пользователь переходил из альбомной ориентации в портретную (несмотря на то, что позволяет нам переходить из альбомной ориентации обратно в предыдущий контроллер в портретной ориентации).понимание и / или помощь будет высоко ценится.

Ответы [ 3 ]

10 голосов
/ 19 февраля 2011

Я нашел способ заставить портрет. Это немного взломать, но вот оно. В - (void) viewDidLoad viewController, для которого вы хотите принудительно установить портрет, выполните следующее:

UIViewController *viewController = [[UIViewController alloc] init];
[self presentModalViewController:viewController animated:NO];
[self dismissModalViewControllerAnimated:NO];
[viewController release];

Это в основном заставляет портрет, представляя контроллер (который по умолчанию поддерживает только портрет).

4 голосов
/ 28 января 2011

Вам нужно будет представить ваш новый контроллер вида модально. Если ваш контроллер представления существует в контроллере навигации, ориентация всех контроллеров представления в стеке nav подразумевается корневым контроллером представления в стеке. Независимо от того, что ваш корневой контроллер представления в стеке nav возвращается из shouldAutoRotateToInterfaceOrientation, затем используется для всех контроллеров представления ниже.

1 голос
/ 06 марта 2013

Ответ от Sahil выше не рекомендуется с iOS 6.0. Однако следующее, кажется, делает то же самое:

UIViewController *viewController = [[UIViewController alloc] init];
[self presentViewController:viewController animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
[viewController release];
...