【问题标题】:Quick look preview only shows a blurred 1st page of documents in MacOS快速查看预览仅在 MacOS 中显示模糊的第一页文档
【发布时间】: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


【解决方案1】:

我终于找到了解决这个问题的方法。诀窍是在 navigationViewController 中显示 quicklook 预览。 这是代码:

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
    }
}

【讨论】:

    猜你喜欢
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2015-12-17
    • 2017-01-10
    相关资源
    最近更新 更多