2

我有一个应用程序商店支持版本 ios5+ 的应用程序。当我将此应用程序部署到商店时,基本 sdk 设置为 5.0,部署目标是 ios 5.0。它目前在 ios 5 和 6 设备上运行良好。

我已经将我的 IDE 升级到 ios 6.0 - 基础 SDK 是 6.0,部署目标是 5.0。但是,当我在 6.0 模拟器或设备中运行此应用程序时,由于该消息已贬值,我会遇到 shouldautorotate 问题。

  1. 为什么如果我的部署目标是 5.0 会给我这些问题 - 我不想使用 ios 6。
  2. 为什么我不能将我的基础 sdk 设置为 5.0?

更新: 这是我的控制器目前的外观。不幸的是,preferredInterfaceOrientation 只被调用一次,而不是每次方向改变时——这对我没有好处,因为我在这个方法中操作视图:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    [self layoutHomeViewButtons:toInterfaceOrientation];

    return YES;
}

- (BOOL)shouldAutorotate
{
    return YES;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeRight;
}

- (NSUInteger)supportedInterfaceOrientations
{

    [self layoutHomeViewButtons:[self getInterfaceOrientation]];

    return UIInterfaceOrientationMaskAll;
}

更新 2: 我已经弄清楚如何调用 supportInterfaceOrientations 方法。在我的 MainWindow.xib 中,我将 navigationcontroller 设置为窗口的根视图控制器。作为这个导航控制器的一个子项,我有我的 homeviewcontroller 上面的代码所在的位置。

如果我更改此链接以使窗口的 rootviewcontroller 成为 homeviewcontroller,则调用该方法。但是我的用户界面需要这个导航控制器!

4

4 回答 4

4

你所描述的听起来很像我在切换到 iOS 6 时所面临的情况。它归结为 self.window 在你的应用程序委托中的处理方式。如果它适用于你的情况,基本上,你想改变你的代码

[self.window addSubview:navigationController.view];

[self.window setRootViewController:navigationController];

一旦我这样做了,我的轮换消息突然按预期开始触发。这是我关于这个主题的博客文章:

http://www.dosomethinghere.com/2012/09/24/the-app-delegates-uiwindow-is-finicky/

于 2012-10-12T14:54:38.260 回答
0

To support the new rotation implement the following methods:

// Tell the system which orientations are supporter
- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

- (BOOL) shouldAutorotate {
    return NO;
} 

// tell the system which rotation should be used when the viewcontroller is presented.
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationLandscapeRight;
}
于 2012-10-12T14:48:24.730 回答
0

没有调用这些 ios6 方法的原因是因为我将窗口的 rootviewcontroller 设置为导航控制器而不是我的 homeviewcontroller,这就是没有调用这些方法的原因。

这对我的解决方案没有用,所以我正在寻找答案,但这确实解决了这个问题。

请参阅我试图弄清楚如何将导航控制器作为 rootviewcontroller 的后续问题:iOS 6 bug:supportedInterfaceOrientations not called when nav controller used as window root

于 2012-10-12T16:03:23.677 回答
0

我可以看到这个问题已经回答了。无论如何,我们在使用 Xcode 4.5 时遇到了同样的问题。但是,如果我们使用 Xcode 4.4.x 构建代码,即使没有 shouldAutorotate 方法,自动旋转也能完美运行。因此,尝试使用 Xcode 4.4.x 进行构建。

于 2012-10-19T04:17:50.043 回答