模式视图控制器强制在iOS 6中的横向方向

我有一个以纵向模式呈现的UITabBarController。 在其中一个选项卡上,我有一个button,显示一个UIViewController模态(一个简单的故事板segue执行操作)。

我想要在横向模式下显示此模式视图,但是我无法自动旋转。

我有这在模态视图控制器

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft); } 

我已经添加landscapeLeft到.plist支持的方向(虽然这也允许TabBar旋转,我不想)

我也将其添加到模态视图的ViewDidLoad

 [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft; 

但我不能让它自己旋转。

谢谢

编辑—-

看来应该AutoRotate甚至不被称为!

此外,我试图检测方向和下面的代码总是显示2,无论方向!

 if ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationPortrait) { NSLog(@"1"); self.hostView.frame = CGRectMake(0, 60, 200, 255); } else { NSLog(@"2"); self.hostView.frame = CGRectMake(0, 45, 480, 255); } 

编辑2 —

我的错。 我想我应该提到我正在使用iOS 6.显示器在iOS 5上自动旋转。shouldAutorotateToInterfaceOrientation已弃用,所以我需要阅读新的方法。

iOS 6.0发行说明
“更多的责任是转移到应用程序和应用程序委托。现在,iOS容器(如UINavigationController)不咨询他们的孩子,以确定他们应该自动旋转。

-(BOOL)shouldAutorotate任何容器(如UINavigationController)UIViewController将不会从IOS6调用。

尝试使用类添加方法到现有的UINavigationController类的解决scheme。

shouldAutorotate方法中,可以在self.viewControllers的每个视图控制器中调用shouldAutorotate方法。 事实上,你可以传递给你的子视图控制器。

如果你想在iOS6中强制旋转,你的rootviewController应该实现这些方法:

 - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } - (BOOL)shouldAutorotate { return YES; } 

在iOS 6中,似乎这种方法可能有助于强制iOS 6的特定方向。

 - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } 

我仍然试图让它工作,并会更新任何调查结果。

我在我的应用程序中完成此操作,并通过shouldAutoRotateToInterfaceOrientation执行此操作,与您稍有不同:

 - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) return (YES); return (NO); } 

对于iOS 6,您还必须设置window.rootViewController = {您的根视图控制器}; 在你的应用程序委托。 我希望这是你的问题