如何在iPhone iOS 6中处理UINavigationController的UIInterfaceOrientationPortrait颠倒

时间:2013-04-28 01:15:42

标签: iphone ios6 orientation

我知道:默认情况下,应用程序和视图控制器支持的界面方向设置为iPad惯用语的UIInterfaceOrientationMaskAll和iPhone惯用语的UIInterfaceOrientationMaskAllButUpsideDown。因此,当我使用Single View Application模板创建一个新项目时,为了在iPhone中执行所有方向,我将以下两个方法添加到ViewController.m中。它有效!

- (NSUInteger)supportedInterfaceOrientations{

    return UIInterfaceOrientationMaskAll;
}
- (BOOL)shouldAutorotate
{
    return YES;
}

然后我在AppDelegate.m下面的方法中更改了一些代码,将应用程序的根视图从UIViewController更改为UINavigationController

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
    } else {
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
    }
    if(myNavigationController == nil)
        myNavigationController = [[UINavigationController alloc]initWithRootViewController:self.viewController];

    self.window.rootViewController = self.myNavigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

之后,我无法处理iPhone iOS6模拟器中的UIInterfaceOrientationPortraitUpsideDown。我怎么解决这个问题?我试图在较旧的主题中搜索一些代码,但它仍然无效。

1 个答案:

答案 0 :(得分:0)

myNavigationController是属性吗?您将其引用为myNavigationControllerself.myNAvigationController。看起来不一致,尤其是在初始化引用ivar的对象时,然后使用属性设置窗口的rootViewController。

另外,你应该澄清你的问题。我想你问的是如何让iPhone自动旋转到颠倒的肖像。答案是:不要。 iPhone不支持水平旋转锁定(不像iPad),违背了设计准则。

话虽如此:您可能想要检查所有viewControllers是否实现了旋转委托,并且它们都支持iPhone的颠倒旋转。我知道你说你开始使用单视图应用程序模板,但是没有其他原因可以阻止轮换。

编辑:您应该检查的另一件事是您的目标设置。此处的“支持的界面方向”部分可能会覆盖您的自定义旋转代码。