如何在iOS 8中的模态视图控制器中强制纵向方向?

时间:2015-01-11 00:30:03

标签: ios objective-c iphone ios8

这是视图控制器的视图控制器代码,我只想以纵向显示...

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
}

- (BOOL)shouldAutorotate {
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

这就是我如何呈现它......

MyViewController *myVC = [[MyViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:myVC];
[self presentViewController:nav animated:YES completion:nil];

如果设备处于横向并且显示视图控制器,则它会正确地自动旋转到纵向。但是如果在设备显示后旋转设备,它会自动旋转到设备所处的任何方向。我想在显示设备后防止自动旋转,并且仅针对这一个视图控制器强制纵向方向。这是一款仅限iOS8的应用程序。

提前感谢您的智慧!

2 个答案:

答案 0 :(得分:4)

问题是您要为错误的对象设置supportedInterfaceOrientations。您已在MyViewController中实现了supportedInterfaceOrientations。但看看你的代码:

MyViewController *myVC = [[MyViewController alloc] init];
UINavigationController *nav = 
    [[UINavigationController alloc] initWithRootViewController:myVC];
[self presentViewController:nav animated:YES completion:nil];

nav是呈现的视图控制器 - 而不是MyViewController。所以nav,UINavigationController,决定我们是否会旋转 - 而不是MyViewController。

所以,给nav一个代理人实施navigationControllerSupportedInterfaceOrientations: - 一切都会好的。

答案 1 :(得分:1)

您在supportedInterfaceOrientations方法中返回了错误的值。

您需要返回UIInterfaceOrientationMaskPortrait

-(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}