只需要将 iOS 5 应用程序更新到 iOS 6,当然偶然发现了界面方向问题。我现在已经知道事情发生了变化,我什至知道发生了什么变化,但我似乎仍然无法独自管理它。
我的应用程序由几个视图控制器组成,它们被推送到导航控制器上。所有视图控制器都应该是横向的,除了一个应该是纵向的。在 iOS 5 中一切正常,但现在纵向模式的一个控制器也显示为横向模式,当然会失真。
我的 iOS 5 代码如下所示:
横向模式下的视图控制器:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
return (interfaceOrientation==UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation==UIInterfaceOrientationLandscapeRight);
}
纵向模式下的视图控制器:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
return (interfaceOrientation==UIInterfaceOrientationPortrait) || (interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown);
}
现在我发现了我实现的 iOS 6 的变化
AppDelegate:(允许所有方向,如在 plist 中)
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
return UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
}
横向模式下的视图控制器:(将方向限制为横向模式)
- (NSUInteger) supportedInterfaceOrientations{
return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}
- (BOOL)shouldAutorotate{
return YES;
}
纵向模式下的视图控制器:(将方向限制为纵向模式)
- (NSUInteger) supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait | UIInterfaceOrientationPortraitUpsideDown;
}
- (BOOL)shouldAutorotate {
return YES;
}
据我了解,这应该有效,但事实是它比以前更有效。首先,横向模式的视图控制器不会停留在横向模式,它们可以向各个方向自由旋转,这当然不是我想要的。其次,纵向模式下的视图控制器会崩溃
Terminating app due to uncaught exception 'UIApplicationInvalidInterfaceOrientation', reason: 'preferredInterfaceOrientationForPresentation must return a supported interface orientation!'
经过反复试验,我似乎只能通过 plist 文件/appdelegate 将所有控制器锁定为横向模式,这当然会强制纵向模式控制器也进入横向模式。另一方面,我可以设法让纵向模式控制器处于正确的方向,但这也会将横向模式控制器旋转到纵向模式。我似乎无法让两者都工作。
有任何想法吗?