无法在WkWebView中重新加载/重新显示PDF;但RTF显然有效

时间:2020-09-26 20:26:13

标签: pdf swiftui webkit

场景: TabbedUI,其中选项卡#1是WkWebView,显示 PDF 常规信息(信息)。

问题:当我退出另一个标签(例如搜索)的标签#1(信息)并返回...时。我在控制台中收到带有以下错误消息的空PDF:

enter image description here

无法发信号通知服务com.apple.WebKit.WebContent:113:无法 找到指定的服务

但是,当我使用标准的.rtf(富文本格式)文件时,此不会发生

这是我的代码:

import SwiftUI
import WebKit

struct IntroSwiftUI: View {

    var body: some View {
        Webview()
            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
            .edgesIgnoringSafeArea(.bottom)
    }

}

// =====================================================================================================

struct Webview: UIViewRepresentable {
    func makeUIView(context: Context) -> WKWebView {
        guard let url = Bundle.main.url(forResource: "ReadMe", withExtension: "pdf") else {
            print("Inside Webview: unable to reload ReadMe.")
            return WKWebView()
        }
        let request = URLRequest(url: url)
        let wkWebview = WKWebView()
        wkWebview.load(request)
        wkWebview.scrollView.bounces = false

        return wkWebview
    }

    func updateUIView(_ uiView: WKWebView, context: Context) {
    }
}

我只希望每当需要阅读一些文档(带有嵌入式图像)的用户时,都可以使用静态PDF进行查看。但是显然它试图重建并迷路了。

我是否需要对PDF进行“特殊”处理,例如在退出时释放它并在返回时重新创建它?
这似乎完全没有效率。

1 个答案:

答案 0 :(得分:0)

每个建议,
使用PDFView范例。

这是我修改后的(正确的)PDF查看代码:

import SwiftUI
import UIKit
import PDFKit

struct PDFKitRepresentedView: UIViewRepresentable {
    let url: URL

    init(_ url: URL) {
        self.url = url
    }

    func makeUIView(context: UIViewRepresentableContext<PDFKitRepresentedView>) -> PDFKitRepresentedView.UIViewType {
        // Create a `PDFView` and set its `PDFDocument`.
        let pdfView = PDFView()
        pdfView.document = PDFDocument(url: self.url)
        return pdfView
    }

    func updateUIView(_ uiView: UIView, context: UIViewRepresentableContext<PDFKitRepresentedView>) {
        // Update the view.
    }
}

struct PDFKitView: View {
    var url: URL

    var body: some View {
        PDFKitRepresentedView(url)
    }
}

// =====================================================================================================

struct IntroSwiftUI: View {
    var body: some View {
        if let documentURL = Bundle.main.url(forResource: "ReadMe", withExtension: "pdf") {
        VStack(alignment: .center) {
            Text("Introduction")
                .font(.title3)
                .fontWeight(Font.Weight.medium)
            PDFKitView(url: documentURL)
        }
        } else {
            Text("Sorry, No PDF")
        }
    }
}