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



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

-(BOOL)shouldAutorotate
{            
    return NO;
}
 - (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

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

在 Xcode 5 中,创建一个类型为"Objective-C category"的新文件,将其"Category"设置为"rotate",然后选择"UINavigationController"作为"Category on"。

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

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

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

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

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

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

- (BOOL) shouldAutorotate
{            
    return NO;
}
 - (NSUInteger) supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

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

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

最新更新