#pdf #swiftui #webkit
#PDF #swiftui #webkit
Вопрос:
Сценарий: TabbedUI с вкладкой # 1, являющейся WKWebView, отображает PDF с общей информацией (Info).
Проблема: когда я выхожу из вкладки # 1 (информация) для другой вкладки (например, поиск) и возвращаюсь….Я получаю пустой PDF-файл со следующим сообщением об ошибке в консоли:
Не удалось передать сигнал службе com.apple.WebKit.WebContent: 113: не удалось найти указанную службу
Однако этого не происходит, когда я использую стандартный файл .rtf (формат Rich Text).
Вот мой код:
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. Почему вы не используете PDFView для отображения pdf? Я никогда не сталкивался с такой проблемой с PDFView
2. Я, честно говоря, забыл о PDFView. Спасибо.
Ответ №1:
Согласно предложению,
используйте парадигму 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")
}
}
}