UIDocumentPickerViewController in SwiftUI on mac (macCatalyst)

ALe*_*opa 11 macos ios swift swiftui mac-catalyst

所以我一直在干预将一个小型 SwiftUI iPad 应用程序“移动”到 Mac,并且我在使用UIDocumentPickerViewController. 我已经包裹UIDocumentPickerViewController在一个UIViewControllerRepresentable像这样:

struct DocumentPickerView: UIViewControllerRepresentable {
  func makeUIViewController(context: Context) -> UIDocumentPickerViewController {
    let documentPicker = UIDocumentPickerViewController(documentTypes: [(kUTTypeImage as String)], in: .import)
    return documentPicker
  }

  func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: Context) {

  }
}
Run Code Online (Sandbox Code Playgroud)

并像这样显示它:

struct ContentView: View {
@State var shows = false
var body: some View {
    Button(action: { self.shows.toggle() }) {
        Text("Select File")
    }
    .sheet(isPresented: self.$shows) {
        DocumentPickerView()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在 iPad 上一切正常, iPad

但是当在 Mac 上时,UIDocumentPickerViewController没有显示,我们得到这个空白的模式:

苹果电脑

小智 0

由于某种原因(我不知道进一步的具体细节),以下内容对我有用(对于 Catalyst):

而不是使用in: .import

let documentPicker = UIDocumentPickerViewController(
    documentTypes: [(kUTTypeImage as String)], 
    in: .import
)
Run Code Online (Sandbox Code Playgroud)

使用in: .open

let documentPicker = UIDocumentPickerViewController(
    documentTypes: [(kUTTypeImage as String)], 
    in: .open
)
Run Code Online (Sandbox Code Playgroud)

我还没有检查 iOS 中是否保留了该功能,但也许您可以使用某种“标志”来确定是否使用.import.open