在UIViewController上设置方向

时间:2014-10-15 15:40:27

标签: ios uiviewcontroller orientation

我正在尝试设置UIViewController的方向,并禁止UIViewController上的所有方向更改。重要的是要注意应用程序允许所有方向,但在这一个视图控制器上我想只允许纵向方向。

我正在使用iOS 8,该应用适用于iOS 6及更高版本。所描述的行为发生在iOS 7和8中。我无法在iOS 6中测试它,因此我不确定它是否出现在iOS 6中。

我实施了以下方法:

- (BOOL)shouldAutorotate
{
    return NO; // I've also tried returning YES - no success
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait; // I've also tried UIInterfaceOrientationPortrait - no success
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationMaskPortrait; // Never called
}

我已经能够设置以模态方式呈现的视图控制器的方向,但我没有为该项目以模态方式呈现视图控制器。甚至可以这样做吗?

如何指定一个UIViewController的方向,而不影响其他UIViewControllers的方向?甚至可以这样做吗?

1 个答案:

答案 0 :(得分:1)

假设您的视图控制器嵌入在导航控制器中,您需要使用UINavigationController的自定义子类并添加:

- (BOOL)shouldAutorotate;
{
    BOOL shouldAutorotate;
    if ([self.topViewController respondsToSelector:@selector(shouldAutorotate)])
    {
        shouldAutorotate = [self.topViewController shouldAutorotate];
     }
     else {
        shouldAutorotate = [super shouldAutorotate];
      }
      return shouldAutorotate;
}

- (NSUInteger)supportedInterfaceOrientations
{
    NSUInteger supportedOrientations;
    if ([[self topViewController] respondsToSelector:@selector(supportedInterfaceOrientations)]) {
        supportedOrientations = [[self topViewController] supportedInterfaceOrientations];
    }
    else {
        supportedOrientations = [super supportedInterfaceOrientations];
    }
    return supportedOrientations;
}
导航控制器中的

。视图控制器中的方法很好,所以请保持原样。这适用于iOS 7-8(尚未在iOS6中测试)