使UiViewController保持纵向模式iOS6 VS iOS5

时间:2012-10-10 06:10:09

标签: ios5 ios6

我正在为iOS5和iOS6构建应用程序。我在UINavigationController中有这个UIViewController,我希望它保持纵向模式。

该代码适用于iOS5,但不适用于iOS6。

// iOS5 rotation
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    if (interfaceOrientation == UIInterfaceOrientationPortrait)
        return YES;
    else
        return NO;
}

// iOS6 rotation
- (BOOL)shouldAutorotate
{

    return YES;


}
- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;

}

这里有什么问题?在SO上我发现了很多类似的问题,但一般来说答案对我不起作用。

修改 也许我不准确,但我需要一个SINGLE视图控制器(我的应用程序的主页)保持纵向模式而不是所有的应用程序

2 个答案:

答案 0 :(得分:7)

首先,很大程度上取决于你的UIViewController嵌入哪个控制器。

例如,如果它在UINavigationController中,那么你可能需要将UINavigationController子类化为覆盖这样的方向方法。

子类化UINavigationController(层次结构的顶层视图控制器将控制方向。)需要将其设置为self.window.rootViewController。

- (BOOL)shouldAutorotate
 {
     return self.topViewController.shouldAutorotate;
 }
 - (NSUInteger)supportedInterfaceOrientations
 {
     return self.topViewController.supportedInterfaceOrientations;
 }

从iOS 6开始,UINavigationController不会要求其UIVIewControllers提供方向支持。因此我们需要将其子类化。

<强>此外

然后,对于你只需要PORTRAIT模式的UIViewControllers,编写这些函数

- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return (UIInterfaceOrientationMaskPortrait);
}

对于需要LANDSCAPE的UIViewControllers,将屏蔽更改为All。

- (NSUInteger)supportedInterfaceOrientations
{
    return (UIInterfaceOrientationMaskAllButUpsideDown);
    //OR return (UIInterfaceOrientationMaskAll);
}

现在,如果您想在Orientation更改时进行一些更改,请使用此功能。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{

}

非常重要

在AppDelegate中

写这个。这非常重要。

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
     return (UIInterfaceOrientationMaskAll);
}

如果您只想为所有viewcontrollers提供纵向模式,请应用portait遮罩。即UIInterfaceOrientationMaskPortrait

否则,如果您希望某些UIViewControllers保留在Portrait中,而其他人支持所有方向,则应用ALL Mask。即UIInterfaceOrientationMaskAll

答案 1 :(得分:0)

试试这个:

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    UIInterfaceOrientationMask orientationMask = UIInterfaceOrientationMaskPortrait;
    return orientationMask;
}

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

这应该只是为了支持肖像模式。