1

我有 3 个UIViewControllers层次UINavigationController结构。

如何仅为其中最后一个启用横向模式?(或在第 1 和第 2 中阻止景观)。

(我通过按 1st > 2nd > 3rd 打开它们)

我尝试用这些方法覆盖 UINavigationController:

-(NSUInteger)supportedInterfaceOrientations {
    UIViewController *top = self.topViewController;

    if ([top isMemberOfClass:[PictureViewController class]]) {
        return UIInterfaceOrientationPortrait | UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
    } else {
        return UIInterfaceOrientationPortrait;
    }
}

-(BOOL)shouldAutorotate {
    UIViewController *top = (UIViewController*) self.topViewController;

    if ([top isMemberOfClass:[PictureViewController class]]) {
        return YES;
    } else {
        return NO;
    }
}

PictureViewController是第 3 位UIViewController。为它shouldAutorotate返回并返回YESsupportedInterfaceOrientationsUIInterfaceOrientationPortrait | UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;

但未启用横向。

4

1 回答 1

0

你确定这个检查

if ([top isMemberOfClass:[PictureViewController class]]) {
    return UIInterfaceOrientationPortrait | UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
} else {
    return UIInterfaceOrientationPortrait;
}

工作正常吗?

在视图控制器和导航控制器中尝试覆盖方法 -(BOOL)shouldAutorotate 和 -(NSUInteger)supportedInterfaceOrientations 仅调用此方法。

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

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

并且注意到用户 Pavan Saberjack,检查项目 plist 中支持的方向。

于 2013-08-28T06:51:44.007 回答