今天下午遇到一个需求,在原有只支持竖屏的应用上需要一个页面支持横屏。琢磨了一会,最后是这样解决的:
1. 在general页面勾选支持横屏的两个选项,并勾选requires full screen选项,让应用支持横屏显示。
2. 自定义一个导航控制器CustomerViewController:UINavigationController,实现如下方法:
- (BOOL)shouldAutorotate
{
return YES;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
if ([self.topViewController isKindOfClass:[DetailQuotaController class]])
{
return UIInterfaceOrientationMaskAllButUpsideDown;
}
return UIInterfaceOrientationMaskPortrait;
}
3. 在根视图控制器中,添加如下方法:
- (BOOL)shouldAutorotate
{
UIViewController * navVC = self.selectedViewController;
if ([navVC isKindOfClass:[CustomerViewController class]])
{
return YES;
}
return NO;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
UIViewController * vc = self.selectedViewController;
if (vc)
{
return [vc supportedInterfaceOrientations];
}
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
UIViewController * vc = self.selectedViewController;
if (vc)
{
return [vc preferredInterfaceOrientationForPresentation];
}
return UIInterfaceOrientationPortrait;
}
这样就可以实现了。
但是这样从横屏界面pop到上一个界面是存在一点问题的,所以还是需要再做一个设置,
在其pop回去的那个页面里加上两行代码:
NSNumber * number = [NSNumber numberWithInt:UIInterfaceOrientationMaskPortrait];
[[UIDevice currentDevice] setValue:number forKey:@"orientation"];
这样就解决了这个问题。