我已经将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];
}
在推入堆栈的每个视图控制器中, supportedInterfaceOrientations
和shouldAutorotate
被称为正常,但只有在使用iOS 7时才会调用preferredInterfaceOrientationForPresentation
。任何触发preferredInterfaceOrientationForPresentation
的想法加载每个视图控制器时,将赞赏=)
提前致谢并抱歉我的英语=)
答案 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)
嗨,这就是我正在做的,你可以尝试一下:
这是一个大脑袋疼痛。
快乐的编码。