preferredInterfaceOrientationForPresentation仅在iOS7中使用UINavigationController的子类调用一次

时间:2013-09-23 16:47:37

标签: ios objective-c ios7

我已经将UINavigationController子类化为:

- (BOOL)shouldAutorotate {

    if (self.topViewController != nil) return [self.topViewController shouldAutorotate];
    else return [super shouldAutorotate];
}

- (NSUInteger)supportedInterfaceOrientations {

    if (self.topViewController != nil) return [self.topViewController supportedInterfaceOrientations];
    else return [super supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {

    if (self.topViewController != nil) return [self.topViewController preferredInterfaceOrientationForPresentation];
    else return [super preferredInterfaceOrientationForPresentation];
}
在推入堆栈的每个视图控制器中,

supportedInterfaceOrientationsshouldAutorotate被称为正常,但只有在使用iOS 7时才会调用preferredInterfaceOrientationForPresentation。任何触发preferredInterfaceOrientationForPresentation的想法加载每个视图控制器时,将赞赏=)

提前致谢并抱歉我的英语=)

2 个答案:

答案 0 :(得分:1)

我会自己回答。我将UINavigationController子类化为调用问题中发布的三个方法,然后将一些视图控制器推入堆栈,将方向限制为纵向,横向或任何我想要的。问题是,在视图控制器上没有调用preferredInterfaceOrientationForPresentation,因此,它们没有显示我想要的方向。要强制iOS以一个方向或另一个方向呈现视图控制器,我检查viewDidLoad中的方向,如果它不是我想要的方向,我按下这样的临时视图控制器:

- (void)viewDidLoad {

    [super viewDidLoad];
    if([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft || [[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) {

        TempViewController *temp = [[TempViewController alloc] init];
        [self.navigationController pushViewController:temp animated:YES];
    }
}

然后在TempViewController中:

- (void)viewDidLoad {

    [super viewDidLoad];
    [self.navigationController popViewControllerAnimated:YES];
}

结果是第一个视图控制器以preferredInterfaceOrientationForPresentation中指定的方向显示。也许这有点棘手,并且无法使用其他实现来完成,但至少这可行=)

答案 1 :(得分:-1)

嗨,这就是我正在做的,你可以尝试一下:

shouldAutorotate, supportedInterfaceOrientations and preferredInterfaceOrientationForPresentation does not work as expected in iOS 7

这是一个大脑袋疼痛。

快乐的编码。