UIDocumentMenuViewController在iPad上的显示给出了;“无法同时满足约束”;

UIDocumentMenuViewController在iPad上的显示给出了;“无法同时满足约束”;,ipad,uikit,autolayout,icloud,uialertcontroller,Ipad,Uikit,Autolayout,Icloud,Uialertcontroller,我在从iPad上的一个工具栏按钮项显示UIDocumentMenuViewController时遇到一些问题。我确实获得了正确的初始行为,并且根据需要从barButtonItem调用了菜单,但是在调用委托之前,我得到了一些自动布局约束消息,我不确定如何修复这些消息。这就是我如何称呼UIDocumentMenu VC的: UIDocumentMenuViewController *documentMenu = [[UIDocumentMenuViewController alloc] initWi

我在从iPad上的一个工具栏按钮项显示UIDocumentMenuViewController时遇到一些问题。我确实获得了正确的初始行为,并且根据需要从barButtonItem调用了菜单,但是在调用委托之前,我得到了一些自动布局约束消息,我不确定如何修复这些消息。这就是我如何称呼UIDocumentMenu VC的:

UIDocumentMenuViewController *documentMenu = [[UIDocumentMenuViewController alloc] initWithDocumentTypes:[self fileUTIList] inMode:UIDocumentPickerModeImport];
documentMenu.delegate = self;
documentMenu.modalPresentationStyle = UIModalPresentationPopover;
documentMenu.popoverPresentationController.barButtonItem = self.rightAddButton;
//documentMenu.popoverPresentationController.sourceView = self.view;
//documentMenu.should have a non-nil sourceView or barButtonItem set before the presentation occurs
[self presentViewController: documentMenu animated:YES completion: ^{
    NSLog(@"DocumentPicker presented completion");
}];
我发现上面的完成处理程序调用正确,在iPad上看起来不错。但当我为菜单选择一个项目时,我立即收到一条“无法同时满足约束”的消息:


但我担心,如果我与此一起发货,这将有重复,并导致一些奇怪的显示问题。有没有办法确定到底是什么导致了这种行为,因为它似乎来自UIDocumentMenuViewController/UIAlertControllerView?

在显示documentMenu之前尝试添加以下内容:

[documentMenu.view setTranslatesAutoresizingMaskIntoConstraints:NO];

iPad有一些关于操作表及其取消按钮的特殊规则,这通常取决于您从何处显示操作表,因此以下是解决崩溃问题的方法:

let importMenu = UIDocumentMenuViewController(documentTypes: [kUTTypeHTML as String ], in: .import)
importMenu.delegate = self
importMenu.modalPresentationStyle = .popover
importMenu.popoverPresentationController?.sourceView = self.view
self.present(importMenu, animated: true, completion: nil)

遗憾的是,这不是一个答案,但苹果的Lister示例代码(Swift变体)在iOS 8.1+Xcode 6.1Objective-c版本上也一直向我发出非常类似的警告。我猜这是内部问题。我把我的更新推到了应用商店,到目前为止似乎没有人抱怨这个问题。我也遇到了同样的问题,这就解决了问题。我提交了一个可能会被欺骗的雷达:这并不能解决我的问题(iOS 9.3.1和iPhone 6/6s)。我复制了@cescofry雷达。不久前我添加了这一行来修复一个bug。然而,在iOS 10 beta 4和5中,它会导致一个更严重的错误:UIDocumentMenuViewController会显示一个空白菜单。它没有帮助!我正是这样做的,我在iOS 11.4中遇到了崩溃。崩溃说明了什么?我只是通过删除
sourceView
行,而不是像这样指定
barButtonItem
documentProvider.popoverPresentationController?.barButtonItem=self.ButtonStore
[documentMenu.view setTranslatesAutoresizingMaskIntoConstraints:NO];
let importMenu = UIDocumentMenuViewController(documentTypes: [kUTTypeHTML as String ], in: .import)
importMenu.delegate = self
importMenu.modalPresentationStyle = .popover
importMenu.popoverPresentationController?.sourceView = self.view
self.present(importMenu, animated: true, completion: nil)