IOS 6.0 + supportInterfaceOrientations НЕ применяется при возврате к контроллеру с помощью popViewControllerAnimated

РЕШИТЬ:

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


У меня есть контроллер, который я нажимаю, и supportInterfaceOrientations вызывается правильно, а значение возвращается правильно - я принудительно устанавливаю портретную ориентацию. Я подклассифицировал свой навигатор и контроллеры вкладок, поэтому я получаю соответствующие методы, называемые штрафом. На самом деле все работает отлично, за исключением одной проблемы:

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

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

В моем оригинальном контроллере supportInterfaceOrientations вызывается нормально (shouldAutorotate возвращает YES), и возвращается то же значение ориентации, что и раньше (только портрет). Однако, несмотря на то, что я передаю только porrtait, содержимое контроллера все еще не изменено.

С точками останова я убедился, что supportInterfaceOrientations вызывается каждый раз. Однако возвращаемое значение не применяется, когда дочерний контроллер ландшафтного контроллера извлечен.

Я попытался добавить [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]; в viewWillAppear, но: 1) он не работает и, 2) не отклонит ли мое приложение?

Как я могу решить эту проблему?

РЕДАКТИРОВАТЬ, вот код, хотя моя проблема очень проста.

в контроллере 1 они ВСЕГДА называются:

-(BOOL)shouldAutorotate{
    return NO;
    ///return YES; // does not matter
}


-(NSUInteger)supportedInterfaceOrientations{

    return UIInterfaceOrientationMaskPortrait;

}

затем, в какой-то момент, я нажимаю на свой второй контроллер (это видео плеер):

[self presentModalViewController:playerController animated:YES];

в контроллере 2:

-(BOOL)shouldAutorotate{
    return YES;
}


-(NSUInteger)supportedInterfaceOrientations{

    return UIInterfaceOrientationMaskAll;

}

шаг повторить:

1) Запустите приложение, оно покажет контроллер 1 в портретном режиме, так как это возвращенная маска. И это не будет вращаться.

2) нажать (или даже представить модально) контроллер 2.

3) Этот будет вращаться. Поверните в ландшафтный режим.

4) поп контроллер 2.

5) контроллер 1 будет находиться в ландшафтном режиме, хотя должны быть вызваны shouldAutorotate и supportInterfaceOrientations, и они возвращают значения, как показано в коде для контроллера 1.

1 ответ

//add code in your controller 1

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}
Другие вопросы по тегам