防止一个视图控制器ios7的自动旋转?

时间:2013-10-26 00:03:01

标签: ios rotation ios7

我的应用可以自动旋转,但我需要其中一个视图仅以纵向模式显示,并且不知道如何实现此目的。 我尝试了这个(除其他外),但有问题的观点仍然在旋转:

-(BOOL)shouldAutorotate
{            
    return NO;
}

 - (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

2 个答案:

答案 0 :(得分:15)

此解决方案解释了如何控制各个视图控制器的方向,前提是它们由导航控制器管理。

在Xcode 5中,创建一个“Objective-C category”类型的新文件,将其“Category”设置为“rotation”,并选择“UINavigationController”作为“Category on”。

项目中将出现一个新的文件对,具有以下名称: UINavigationController的+ rotation.h 的UINavigationController + rotation.m

在.m文件中,编写以下代码:

- (BOOL) shouldAutorotate
{
    return [[self topViewController] shouldAutorotate];
}

- (NSUInteger) supportedInterfaceOrientations
{
    return [[self topViewController] supportedInterfaceOrientations];
}

这样,导航控制器将让当前的顶视图控制器确定方向策略。

然后,在导航控制器管理的每个特定视图控制器中,您可以覆盖两个与方向相关的方法。

例如,如果特定视图控制器仅以纵向显示:

- (BOOL) shouldAutorotate
{            
    return NO;
}

 - (NSUInteger) supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

确保所需的方向是项目部署信息中设置的方向之一。 希望这足够详细,可以提供帮助。

答案 1 :(得分:6)

如果将视图控制器显示为模态视图控制器,

supportedInterfaceOrientations将起作用。如果您将其作为导航控制器堆栈的一部分呈现,它将无法工作。如果您希望您的视图以模态方式呈现,但在导航控制器内(例如,有导航项),我所做的解决方案是继承UINavigationController并覆盖我的子类上的supportedInterfaceOrientations方法。