У меня есть UINavigationController в качестве контроллера корневого представления моего UIWindow на iOS 7 и iOS 8. С одного из своих контроллеров представления я представляю полноэкранный modal view controller с перекрещивающимся стилем презентации. Этот контроллер модального представления должен иметь возможность вращаться ко всем ориентациям, и он отлично работает.
Проблема заключается в том, что устройство удерживается в альбомной ориентации, а диспетчер модального просмотра отклоняется. Контроллер представления, который представил модальный, поддерживает только портретную ориентацию, и я подтвердил, что UIInterfaceOrientationMaskPortrait возвращается в -application: supportedInterfaceOrientationsForWindow:. -shouldAutorotate возвращает ДА, также. Однако ориентация контроллера представления зрения после отклонения модальности остается ландшафтом. Как я могу заставить его оставаться в портретной ориентации, позволяя модальным воспринимать ориентацию устройства? Мой код:
Делегат приложения:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
UINavigationController *navigationController = (UINavigationController *)self.deckController.centerController;
NSArray *viewControllers = [navigationController viewControllers];
UIViewController *top = [viewControllers lastObject];
if (top && [top presentedViewController]) {
UIViewController *presented = [top presentedViewController];
if ([presented respondsToSelector:@selector(isDismissing)] && ![(id)presented isDismissing]) {
top = presented;
}
}
return [top supportedInterfaceOrientations];
}
return (UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskLandscapeRight);
}
Представление контроллера представления:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
Модальный контроллер:
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return (UIInterfaceOrientationMaskLandscape|UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskPortrait);
}