30

应用支持:iOS6+

我的应用程序适用于纵向和横向。但是 1 个控制器只能在肖像中使用。

问题是,当我处于横向并推动视图控制器时,新的视图控制器也处于横向状态,直到我将其旋转为纵向。然后它被卡在肖像中,因为它应该是。

是否有可能总是让它出现在肖像中?即使它的父母在横向推动它?

以下所有代码都无济于事

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];

并且此代码一直有效,除非我不从横向推动如何在 iOS 6 中强制 UIViewController 为纵向方向

4

2 回答 2

31

我通过在 ViewDidLoad 中添加以下行解决了这个问题

UIViewController *c = [[UIViewController alloc]init];
[self presentViewController:c animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
于 2013-02-01T18:33:13.527 回答
3

首先,您需要创建一个类别:

UINavigationController+Rotation_IOS6.h

#import <UIKit/UIKit.h>

@interface UINavigationController (Rotation_IOS6)

@end

UINavigationController+Rotation_IOS6.m:

#import "UINavigationController+Rotation_IOS6.h"

@implementation UINavigationController (Rotation_IOS6)

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

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

@end

然后,你在你的类中实现这些方法,你只想成为风景:

- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

如果您使用的是 UITabBarController,只需将 UINavigationController 替换为 UITabBarController。经过长时间的搜索,这个解决方案对我很有效!我和你现在的情况一样!

编辑

所以,我看到了你的样本。你需要做一些改变。1 - 为 UINavigationController 类别创建一个新类。将类命名为 UINavigationController+Rotation_IOS6(.h 和 .m) 2 - 您不需要实现该方法preferredInterfaceOrientationForPresentation。您的类别应如下所示:

#import "UINavigationController+Rotation_IOS6.h"

@implementation UINavigationController (Rotation_IOS6)

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

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

@end

3 - 在您只想横向旋转的类中,将其包含在实现中,就像这样:

// Rotation methods for iOS 6
- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

4 - 我建议在你想要的横向类中也包括 iOS 5 的自动旋转方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
}
于 2013-01-31T19:14:49.473 回答