4

在 iOS 6 上运行应用程序时,我的应用程序不再成功自动旋转。我已经更新到 Cordova 2.1,我的MainViewController.m文件中有以下代码(它是 的子类CDViewController,与新的 iOS6 处理自动旋转的方式兼容:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return [super shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}

// iOS 6
- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    NSUInteger ret = 0;

    if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortrait])
        ret = ret | (1 << UIInterfaceOrientationPortrait);
    if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortraitUpsideDown])
        ret = ret | (1 << UIInterfaceOrientationPortraitUpsideDown);
    if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight])
        ret = ret | (1 << UIInterfaceOrientationLandscapeRight);
    if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft])
        ret = ret | (1 << UIInterfaceOrientationLandscapeLeft);

    return ret;
}
4

3 回答 3

8

在您的 AppDelegate.m 中,您需要将以下内容添加到didFinishLaunchingWithOptions

[self.window setRootViewController:self.viewController];

添加后,旋转应该再次开始工作。它适用于我的两个应用程序。

于 2012-10-17T12:32:41.343 回答
4

这里仍然太新,无法在此线程中投票支持 mattdryden 的答案。但是,我想支持他的回答,并且为了增加价值,请注意他建议的修复也适用于 PhoneGap/Cordova 1.9

我有一些应用程序尚未通过 PhoneGap/Cordova 1.9 --> 2.0/2.1 更新过程,并且手动使上述 AppDelegate.m 中建议的更改适用于这些应用程序。

此外,值得补充的是,你把这条线放在哪里似乎很重要。

我最初在之前添加了这一行:return YES 并且它失败了。事实证明,您需要将它放在此行之前

[self.window addSubview:self.viewController.view];

还有一件事....帮助谷歌/等。更快地发现这个问题......控制台日志中需要添加此行的关键提示如下:

应用程序窗口应该在应用程序启动结束时有一个根视图控制器

添加上面提到的代码行会使这个错误消失......

希望这可以帮助其他人看到这个问题。

于 2012-10-30T17:09:35.540 回答
1

我在 iOS 6 上的 iPad 应用程序遇到了类似的问题。出现此问题是因为 MainViewController 未设置为AppDelegate.m. 在你的AppDelegate.m替换:

[self.window addSubview:self.viewController.view];

self.window.rootViewController = self.viewController;
于 2012-11-08T14:30:26.440 回答