2013-09-24 5 views
2

В прошивкой 5 и 6 я делал это в методе viewWillAppear на мой взгляд контроллера:Force альбомной ориентации в одном контроллере представления

UIViewController *c = [[UIViewController alloc] init]; 
//To avoid the warning complaining about the view not being part of the window hierarchy 
[[[TWNavigationManager shared] window] addSubview:c.view]; 
[self presentModalViewController:c animated:NO]; 
[self dismissModalViewControllerAnimated:NO]; 
[c.view removeFromSuperview]; 

Я также добавил этот метод в приложение делегата

- (NSUInteger)application:(UIApplication *)application  supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 
    return [[TWNavigationManager shared] supportedInterfaceOrientationsForTopViewController]; 
} 

Который в основном направляет вызов на контроллер верхнего уровня.

Это вызвало методы автоматического поворота для моего контроллера представления, а затем я смог принудительно настроить ориентацию ландшафта только для этого контроллера вида. Теперь в iOS 7 этот код больше не работает. Белый экран отображается в полноэкранном режиме.

Каким будет подходящий подход в iOS7?

Заранее спасибо.

+0

Откуда вы представляете этот Lanscape-only-viewController? Является ли это «push» в стеке навигации? Или представлением viewcontroller modally? (в этом случае это проще) – Vinzzz

+0

Да, это толчок в навигационный стек. Мой контроллер корневого представления - это UITabBarViewController, и каждый элемент имеет UINavigationController. – mdonati

ответ

5

Имел ту же проблему и сумел исправить ее, отклонив представленный модальный вид анимированный: ДА.

[self dismissViewControllerAnimated:YES completion:nil]; 

Надеюсь, что это поможет!

0

Мое решение включает в себя то, что предложил Андрей Финаев, но также мне пришлось установить другой стиль перехода, иначе я получал пустой экран после завершения анимации увольнения.

UIViewController *mVC = [[UIViewController alloc] init]; 
mVC.modalPresentationStyle = UIModalPresentationFullScreen; 
mVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self.navigationController presentViewController:mVC animated:NO completion:^{ 
    [self.navigationController dismissViewControllerAnimated:YES completion:^{ 

    }]; 
}]; 
0

Чтобы предотвратить маленький «мигающий» от mdonia решения, я добавил dispatch_after и был в состоянии отклонить фиктивный модальный ViewController с анимацией: НЕТ

UIViewController *dummyModalVC = [UIViewController new]; 
[dummyModalVC setModalPresentationStyle:UIModalPresentationFullScreen]; 
[dummyModalVC setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
[dummyModalVC.view setBackgroundColor:[UIColor purpleColor]]; 

[self presentViewController:dummyModalVC animated:NO completion:^{ 
    double delayInSeconds = 0.001f; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [dummyModalVC dismissViewControllerAnimated:NO completion:^{}]; 
    }); 
}]; 

Looks конечно еще как уродливые обходной путь , но я не нашел лучшего решения в заданное время ... (

Смежные вопросы