我在谷歌搜索时发现了很多文章,但似乎没有真正涵盖这种情况,所以我会尝试非常具体。 我有一个仅适用于iPhone和iPad的Landscape应用程序。我试图让用户使用以下代码从他的相册中选择一张图片:
let imagePicker = UIImagePickerController()
imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
imagePicker.mediaTypes = [kUTTypeImage as String]
imagePicker.modalPresentationStyle = UIModalPresentationStyle.Popover
imagePicker.allowsEditing = false
context.presentViewController(imagePicker, animated: true, completion: {
() -> Void in
})
我正在使用Popover演示风格,因为Apple mentions在iPad上这是必须设置的方式,否则将抛出异常:
该表格表明在iPad上,如果指定了源类型 photoLibrary或savedPhotosAlbum,您必须出示图像选择器 使用弹出控制器(要了解如何执行此操作,请参阅 UIPopoverPresentationController)。如果您尝试呈现图像 模拟选择器(全屏),用于选择已保存的图片和 电影,系统引发了例外。
此操作失败并出现以下错误
*** Terminating app due to uncaught exception 'UIApplicationInvalidInterfaceOrientation', reason: 'Supported orientations has no common orientation with the application, and [PUUIAlbumListViewController shouldAutorotate] is returning YES'
我尝试过:
更新 不是答案,但看起来很疯狂,我不认为这是可行的。感谢Apple提供最先进的API,其中一切都很有意义。 我最终使用DKImagePickerController,完成了工作
答案 0 :(得分:0)
我还有一个强制执行景观的应用程序。唯一的选择是放松并允许图像选择器作为肖像出现,因为这是它出现时的默认位置。
答案 1 :(得分:0)
对导航控制器进行子类化并更改横向方向遮罩。然后从NavigationController中显示您的Image Picker控制器。
class CustomNavigation: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override var shouldAutorotate: Bool {
return false
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.portrait
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}