【问题标题】:Prevent autorotate for one view controller ios7?防止一个视图控制器ios 7的自动旋转?
【发布时间】:2013-10-26 00:03:00
【问题描述】:

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

-(BOOL)shouldAutorotate
{            
    return NO;
}

 - (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

【问题讨论】:

    标签: ios rotation ios7


    【解决方案1】:

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

    在 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;
    }
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • @rkh 你需要代​​码来创建一个覆盖一个函数的子类?
      • 不,我只是想“用代码”向 Victor 解释你的解决方案,因为他看起来像一个新用户......我很好 :)
      • 你能给我举个例子吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多