场景: TabbedUI,其中选项卡#1是WkWebView,显示 PDF 常规信息(信息)。
问题:当我退出另一个标签(例如搜索)的标签#1(信息)并返回...时。我在控制台中收到带有以下错误消息的空PDF:
无法发信号通知服务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进行“特殊”处理,例如在退出时释放它并在返回时重新创建它?
这似乎完全没有效率。
答案 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")
}
}
}