8

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

我希望这个模态视图以横向模式显示,但我不能让它自动转动。

我在模态视图控制器中有这个

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

我已将 LandscapeLeft 添加到 .plist 支持的方向(尽管这也允许 TabBar 旋转,而我不想要)

我还将它添加到模态视图的 ViewDidLoad

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;

但我就是不能让它自己旋转。

谢谢

编辑 - -

似乎 shouldAutoRotate 甚至没有被调用!

另外,我正在尝试检测方向,下面的代码始终显示 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,所以我需要阅读新方法。

4

4 回答 4

7

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

-(BOOL)shouldAutorotate任何 Container(如 UINavigationController)下的 UIViewController 都不会从 IOS6 调用。

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

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

于 2012-10-03T20:24:51.470 回答
6

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

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

- (BOOL)shouldAutorotate {
    return YES;
}
于 2012-10-03T08:44:42.633 回答
1

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

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

我仍在努力让它发挥作用,并将更新任何发现。

于 2012-09-24T19:07:27.613 回答
0

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

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

对于 iOS 6,您还必须设置 window.rootViewController = {your root view controller}; 在您的应用委托中。我希望这是你的问题

于 2012-08-21T18:14:16.977 回答