我在哪里可以设置UINavigationControllers supportedOrientations?

时间:2012-08-29 00:51:27

标签: objective-c uinavigationcontroller ios6

我正在使用iOS 6.0测试版,我的轮换不再有效了。

我在哪里可以设置UINavigationControllers supportedOrientations?

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

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

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

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

谢谢你的帮忙!

干杯!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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];

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