解除推送时,iOS 7强制纵向方向

时间:2014-09-10 15:48:25

标签: ios xcode uinavigationcontroller orientation

此时我正在将ViewControllerA保持在纵向模式的一半。为此,我使用 preferredInterfaceOrientationForPresentation

这确保了当我按下ViewControllerA时,ViewControllerA将处于纵向模式。但是,如果我从ViewControllerA推送到ViewControllerB,切换到ViewControllerB中的横向模式,然后关闭回ViewControllerA,ViewControllerA可以横向模式显示。我的愿望是继续ViewControllerB的多方位支持,但强制ViewControllerA自动镜像为纵向。

此外,出于某种原因 shouldAutorotate 似乎没有在ViewControllerA中调用。也许解决这个问题可以解决整个问题吗?

UINavigationController + Orientation.h类别

@interface UINavigationController (Orientation)

- (BOOL)shouldAutorotate;
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation;

@end

UINavigationController + Orientation.m类别

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

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}

@end

ViewControllerA.m

- (BOOL)shouldAutorotate {
    return YES;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我的解决方案如下,并在发布的应用程序中。

我在appDelegate.h中添加了一个名为allowViewRotation的公共属性:

@property (assign, nonatomic) BOOL allowViewRotation;

然后我在AppDelegate.m文件中实现了以下调用:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { // if iPad
        return UIInterfaceOrientationMaskAll;
    }

    if (self.allowViewRotation) {
        return UIInterfaceOrientationMaskAllButUpsideDown;
    }
    else {
        return UIInterfaceOrientationMaskPortrait;
    }
}

现在在ViewControllerA中将allowViewRotation属性设置为NO

((AppDelegate*)[UIApplication sharedApplication].delegate).allowViewRotation = NO;

在ViewControllerB中将allowViewRotation属性设置为YES

((AppDelegate*)[UIApplication sharedApplication].delegate).allowViewRotation = YES;

注意:确保在部署信息中启用正确的设备方向

enter image description here

希望这有帮助!

答案 1 :(得分:0)

好吧,我能把事情搞定了!

所以在我的情况中,让事情变得困难的一件事是我有两个部分;一个是在登录之前发生的(没有NavController)另一个是登录后(确实有NavController)。也许我在那里打破了最佳实践指南?

无论如何,Teo C。的答案是帮助我的答案:iOS 7. Change page orientation only for one view controller

我通过制作一个新的空白项目来做这个发现。如果您在强制方向时遇到问题,可以查看我制作的示例https://github.com/jerherrero/Force-Orientations