【发布时间】:2021-12-13 18:40:04
【问题描述】:
我有一个适用于 mac 催化剂的 SwiftUI iOS 应用程序。我正在使用 QuickLook Preview 在应用程序中显示 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 上正确呈现文档?
【问题讨论】:
-
将 QLPreviewController 嵌入到视图中,然后显示在工作表中是非常棘手的。您是否尝试过使用原生 .quickLook SwiftUI API?
-
@ThomasDeniau 我不知道这个修饰符。看起来我可以用那个。但是你能给我举个例子吗?因为我不太确定它是如何工作的。非常感谢
-
我尝试在我的 ContentView 中的 ZStack 上使用 .quickLookPreview 修饰符,但它在 mac 上抛出错误
Value of type 'some View' has no member 'quickLookPreview然而,它在 iOS 上运行良好,那么这里有什么问题? -
我不知道它在 Catalyst 上不起作用,抱歉。提交错误? Catalyst 的问题在于它不支持嵌入 QLPreviewController 的视图(因为在 Catalyst 上,QLPreviewController 已桥接到 macOS 预览面板),而这正是您在这里想要实现的。嵌入式视图被缩略图 IIRC 取代,我想这就是你所看到的。不确定解决方案是什么。我对 SwiftUI / Catalyst 不是很熟悉。也许你可以直接调用 macOS quickLook 视图修饰符?这个应该可以吧?
标签: swift swiftui docx mac-catalyst quicklook