5

我正在使用 iOS 6.0 测试版,我的旋转不再起作用。

我在哪里可以设置 UINavigationControllers supportedOrientations?

根据这个http://news.yahoo.com/apple-ios-6-beta-3-changes-182849903.html UINavigation Controller 不会咨询他们的孩子来确定他们是否应该自动旋转。

我不再使用 shouldAutorotateToInterfaceOrientation: 了,因为它已被弃用。相反,我使用的是supportedInterfaceOrientations:和shouldAutoRotate:并且它们工作正常,直到我将ViewController放入NavigationController(作为孩子)。从那时起,在 ViewController 中指定的方向不再起作用。它似乎正在使用导航控制器设置的方向(UIInterfaceOrientationMaskAllButUpsideDown)

如何设置 NavigationController 的 InterfaceOrientations 以便我的 ViewControllers 锁定为纵向?

我是否必须继承 UINavigationController 并在那里设置 InterfaceOrientations?在 iOS 6.0 中继承 UINavigationController 不是不好的做法吗?

谢谢你的帮助堆!

干杯!

4

2 回答 2

9

如果您希望它再次咨询它的孩子,您可以向 UINavigationController 添加一个类别

@implementation UINavigationController (Rotation_IOS6)

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

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

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

@end
于 2012-09-22T01:10:14.067 回答
4

子类 UINavigationController

//OnlyPortraitNavigationController.h

@interface OnlyPortraitNavigationController : UINavigationController

//OnlyPortraitNavigationController.m

@implementation OnlyPortraitNavigationController

- (BOOL)shouldAutorotate {
    return NO;
}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortrait; //for locked only Portrait
}

使用您的肖像 ViewController 呈现新的子类 navigationController

SomeViewController *onlyPortraitVC = [[SomeViewController alloc]init];

OnlyPortraitNavigationController *portraitNav = [[OnlyPortraitNavigationController alloc]initWithRootViewController:onlyPortraitViewController];

[self presentViewController:portraitNav animated:YES completion:NULL];

这是我的应用程序上的工作,希望它可以帮助你。

于 2012-09-17T05:11:35.297 回答