我有一个以纵向模式呈现的UITabBarController。在其中一个选项卡上,我有一个按钮,以模态方式显示UIViewController(一个简单的故事板segue执行操作)。
我希望这个模态视图以横向模式显示,但我无法自动转动。
我在模态视图控制器中有这个
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
我已将landscapeLeft添加到.plist支持的方向(虽然这也允许TabBar旋转,我不想要)
我还将其添加到模态视图的ViewDidLoad
[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;
但我无法让它自行旋转。
由于
编辑----
似乎应该甚至没有调用自动旋转!
另外,我正在尝试检测方向,下面的代码总是显示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已被弃用,因此我需要阅读新方法。
答案 0 :(得分:7)
不会从IOS6调用任何Container(如UINavigationController)下的UIViewController的iOS 6.0发行说明
“更多的责任转移到app和app delegate。现在,iOS容器(例如UINavigationController)不会咨询他们的孩子以确定他们是否应该自动旋转。”
-(BOOL)shouldAutorotate
。
尝试使用Category将方法添加到现有的UINavigationController类。
在 shouldAutorotate 方法中,您可以在self.viewControllers的每个视图控制器中调用shouldAutorotate方法。实际上,您可以传递给您的子视图控制器。
答案 1 :(得分:6)
如果你想在iOS6中强制轮换,你的rootviewController应该实现这些方法:
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
- (BOOL)shouldAutorotate {
return YES;
}
答案 2 :(得分:1)
在iOS 6中,似乎这种方法可能有助于强制iOS 6上的特定方向。
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
我仍然试图让它发挥作用,并会根据任何调查结果进行更新。
答案 3 :(得分:0)
我在我的应用程序中完成此操作,并通过shouldAutoRotateToInterfaceOrientation执行此操作,与您略有不同:
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (UIInterfaceOrientationIsLandscape(interfaceOrientation))
return (YES);
return (NO);
}
对于iOS 6,您还必须设置window.rootViewController = {您的根视图控制器};在你的应用程序委托中。我希望这是你的问题