我有一个我试图普及的iPhone应用程序。我有这段代码:
let documentMenu = UIDocumentMenuViewController(documentTypes: [kUTTypeContent as String], inMode: .Import)
documentMenu.modalPresentationStyle = .FormSheet
documentMenu.delegate = self
self.presentationContext.presentViewController(documentMenu, animated: true, completion: nil)
self.presentationContext
只是一个传递给该类的视图控制器。
每次执行此代码时,都会发生此错误:
您的应用程序提供了一个UIDocumentMenuViewController()。在其当前的特征环境中,具有此样式的UIDocumentMenuViewController的modalPresentationStyle是UIModalPresentationPopover。您必须通过视图控制器的popoverPresentationController为此弹出窗口提供位置信息。您必须提供sourceView和sourceRect或barButtonItem。如果在呈现视图控制器时未知此信息,则可以在UIPopoverPresentationControllerDelegate方法-prepareForPopoverPresentation中提供该信息。
我不确定是怎么回事。我甚至试图设置sourceView
和sourceRect
来阻止错误,然而,它将DocumentMenuViewController
粘贴到一个弹出框中,我不是那样的。我需要在屏幕中央以模态方式呈现。任何帮助表示赞赏。
答案 0 :(得分:1)
问题在于,UIDocumentMenuViewController
并不希望显示为除了较小的" popover"之外的任何内容。演示风格。它自己的实现会覆盖其modalPresentationStyle
到.Popover
的任何设置。因此,您最终会忽略将样式设置为.FormSheet
的尝试。
这是导致错误的原因。样式为.Popover
后,您必须执行错误说明并设置sourceView
和sourceRect
或barButtonItem
的适当组合。
向Apple提交增强请求,以支持其他模式演示样式。在此期间,您需要调整UI。
答案 1 :(得分:0)
let documentMenu = UIDocumentMenuViewController(documentTypes: [kUTTypeContent as String], inMode: .Import)
documentMenu.popoverPresentationController?.sourceView = self // UIView
documentMenu.modalPresentationStyle = .popover
documentMenu.delegate = self
self.presentationContext.presentViewController(documentMenu, animated: true, completion: nil)
答案 2 :(得分:0)
以下代码运行正常
let importMenu = UIDocumentMenuViewController(documentTypes: [String(kUTTypePDF)], in: .import)
importMenu.popoverPresentationController?.sourceView = self.view // so that iPads won't crash
importMenu.delegate = self
importMenu.modalPresentationStyle = .formSheet
self.present(importMenu, animated: true, completion: nil)
答案 3 :(得分:0)
我为Mac Catalyst支付的2美分:
在Mac Catalyst上,您必须使用.formSheet
如此:
#if targetEnvironment(macCatalyst)
let modalPresentationStyle : UIModalPresentationStyle = .formSheet
#else
let modalPresentationStyle : UIModalPresentationStyle = .popover
#endif
optionsVC.modalPresentationStyle = modalPresentationStyle
optionsVC.popoverPresentationController?.sourceView = self.view
self.present(optionsVC, animated: true) {
}
最终添加:
optionsVC.modalPresentationStyle = modalPresentationStyle
为防止外部窃听,系统将在不调用回调的情况下关闭(仅限iOs13 / Catalyst)