iOS7 iPad只使用UIImagePickerController横向应用程序

我相信这是一个常见的问题,许多答案不再工作,许多只是部分,如果你是在iOS7下,你的iPad应用程序只是横向,但你想使用UIImagePickerController与源UIImagePickerControllerSourceTypePhotoLibraryUIImagePickerControllerSourceTypeCamera

如何设置正确,所以它工作100%? 而且你没有得到混合的方向,并避免错误“支持的方向与应用程序没有共同的方向,并且应该返回YES ”。

如果您的iPad应用仅在所有情况下都是横向的,请执行以下3个步骤:

1)在你的应用程序委托

 - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return UIInterfaceOrientationMaskAll; } 

2)创build一个类别标题

 #import "UIViewController+OrientationFix.h" @implementation UIViewController (OrientationFix) - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { return UIInterfaceOrientationIsLandscape(toInterfaceOrientation); } - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } @end 

3)创build一个类别的实现

 #import "UIImagePickerController+OrientationFix.h" @implementation UIImagePickerController (OrientationFix) - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { return UIInterfaceOrientationIsLandscape(toInterfaceOrientation); } - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } @end 

注意:您不需要在任何地方导入这些类别,只要它们与项目一起编译即可

注意:不需要在任何VC中实现这些方法

注意:不需要改变plist支持的方向

这是在任何条件下进行testing和工作

我已经从苹果的示例代码中看到这个代码。

 UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext; 

由于这个UIModalPresentationCurrentContext UIImagePickerController将根据设备的当前方向打开。

苹果的文档说:

“重要:UIImagePickerController类只支持纵向模式。”

虽然,它在全屏和iOS 6上的横向效果很好。

UIImagePickerController类的引用

感谢上面的Peter Lapisubuild议。 它不适合我(也许我在iOS 8.3),但我能够修改它,以解决我的方向问题。 我的代码如下

在应用程序委托

 - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return UIInterfaceOrientationMaskAll; } 

UIImagePickerController类别

 @implement UIImagePickerController (extensions) - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return [[UIApplication sharedApplication] statusBarOrientation]; } @end 

UIViewController类别

 @implementation UIViewController (extensions) - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } @end 

虽然大多数的答案build议使用.currentContext ,我已经发现了解雇imagepicker后,一切都是错的。

在一个Landscaped iPad上, imho最好是使用.formSheet

 let picker = UIImagePickerController() picker.modalPresentationStyle = .formSheet picker.sourceType = .photoLibrary picker.delegate = self self.present(picker, animated: true)