快速预览只显示MacOS中模糊的第一页文档



我有一个SwiftUI iOS应用程序,可用于mac catalyst。我正在使用QuickLook预览在应用程序中显示pdf、docx、图像和pptx。渲染在iOS上运行良好,但在MacOS上,只有1页文档显示为模糊。

这是我实现QuickLook:的代码

import SwiftUI
import QuickLook
struct PreviewController: UIViewControllerRepresentable {
@Binding var url: URL
func makeUIViewController(context: Context) -> QLPreviewController {
let controller = QLPreviewController()
controller.dataSource = context.coordinator
return controller
}
func updateUIViewController(
_ uiViewController: QLPreviewController, context: Context) {}

func makeCoordinator() -> Coordinator {
return Coordinator(parent: self)
}
class Coordinator: QLPreviewControllerDataSource {

let parent: PreviewController

init(parent: PreviewController) {
self.parent = parent
}

func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
return 1
}

func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
return parent.url as NSURL
}

}
}

然后我在工作表的"内容"视图中调用它。问题是,为了在MacOS上正确呈现文档,我应该采取什么不同的做法?

我终于找到了这个问题的有效解决方案。诀窍是在导航ViewController中显示快速预览。这是代码:

struct PreviewControllerMac: UIViewControllerRepresentable {
@Binding var url: URL
func makeUIViewController(context: Context) -> UINavigationController {
let controller = QLPreviewController()
controller.dataSource = context.coordinator
controller.delegate = context.coordinator
let navigationController = UINavigationController(rootViewController: controller)
return navigationController
}
func updateUIViewController(_ uiViewController: UINavigationController, context: Context) {}
func makeCoordinator() -> Coordinator {
return Coordinator(parent: self)
}
class Coordinator: NSObject, QLPreviewControllerDelegate, QLPreviewControllerDataSource {
let parent: PreviewControllerMac
init(parent: PreviewControllerMac) {
self.parent = parent
}
func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
return 1
}
func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
return parent.url as NSURL
}
func previewController(_ controller: QLPreviewController, editingModeFor previewItem: QLPreviewItem) -> QLPreviewItemEditingMode {
return .updateContents
}
}

最新更新