2013-09-24 24 views
2

在iOS 5及6我在viewWillAppear中的方法在我的视图控制器这样做:力横向

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?它是导航堆栈中的“推”还是模态地呈现的视图控制器?在这种情况下,它更容易) – Vinzzz

+0

是的,这是一个推动导航堆栈。我的根视图控制器是一个UITabBarViewController,每个项目都有一个UINavigationController。 – mdonati

回答

5

有同样的问题,并设法通过解除所呈现的模态视图动画:是的。

[self dismissViewControllerAnimated:YES completion:nil]; 

希望帮助!

0

我的解决方案涉及安德烈Finayev建议,但也必须设置另一种过渡风格,否则我在解雇动画完成后变得空白屏幕。

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:NO

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:^{}]; 
    }); 
}]; 

当然看起来仍然像一个丑陋的解决方法,但我没有找到在给定的时间内更好的解决方案...;(