7

几分钟前我设置了 XCode 4.5 和 iOS6 模拟器。我的应用程序支持 iPhone 的所有4 个方向,纵向底部和顶部主页按钮,横向左右。

好吧,我把它放到 .plist 中,因为它是 iOS6 所要求的,而且旧的 shouldRotateTo... 方法仍然存在,返回 YES。

但在模拟器中,应用程序不会旋转到纵向顶部主页按钮。

为什么?这是故意的吗?它会在设备上正常工作吗?

谢谢。

4

4 回答 4

18

好的,我现在自己找到了答案。

拥有是不够的

- (BOOL)shouldAutorotate {

    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {

    return UIInterfaceOrientationMaskAll;
}

在您的 ViewController 中,如果它被推入UINavigationViewController. UINavigationViewController也得有那些方法。最好通过在UINavigationViewController.

这是我的UINavigationController-Rotation.h

@interface UINavigationController (Rotation)
@end

和我的 UINavigationController-Rotation.m:

#import "UINavigationController-Rotation.h"

@implementation UINavigationController (Rotation)

#pragma From UINavigationController

- (BOOL)shouldAutorotate {

    BOOL result = self.topViewController.shouldAutorotate;

    return result;
}

- (NSUInteger)supportedInterfaceOrientations {

    NSUInteger result = self.topViewController.supportedInterfaceOrientations;

    return result;
}

#pragma -

@end

谢谢你帮助我!

于 2012-09-20T18:22:48.833 回答
2

iPhone 上 iOS6 的默认行为是没有颠倒方向。

来自 UIViewController 类参考:视图控制器支持的界面方向的默认值设置为 iPad 惯用语的 UIInterfaceOrientationMaskAll 和 iPhone 惯用语的 UIInterfaceOrientationMaskAllButUpsideDown 。

您也可以在 Safari 或地图中看到此行为。

我试图用 UIInterfaceOrientationMaskAll 覆盖它,就像 Dean 说的那样,但没有效果。我决定不再使用颠倒模式,因为它是一种我喜欢遵循的用户界面指南,而不是让用户感到困惑。

于 2012-09-20T13:20:43.563 回答
1

我认为您的 viewControllers 将返回几乎颠倒的默认值。你需要实现:

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

对于您想要支持所有方向的所有视图控制器。

于 2012-09-20T03:04:42.300 回答
0

以防即使在遵循 Christoh 的回答后仍有问题的其他人:

我刚刚注意到项目 plist 有 iPad 和 iPhone 的单独条目(支持的界面方向(iPad)和支持的界面方向(iPhone))。

希望有帮助。

于 2012-11-06T21:59:36.393 回答