我正在从WKWebView的主捆绑包或文档目录中加载pdf文件。它一开始会完美加载,但是如果我在Tabbar控制器中切换选项卡后回到同一屏幕,则其显示的灰色背景和pdf内容将变得不可见。这是我用来加载的代码
class ViewController: UIViewController {
@IBOutlet var progressView: UIProgressView!
@IBOutlet var webView: WKWebView!
var pdfURLS: URL?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
pdfURLS = Bundle.main.url(forResource: "97_pdf", withExtension: "pdf", subdirectory: nil, localization: nil)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("pdfURLS: \(String(describing: pdfURLS))")
}
@IBAction func loadAction(_ sender: Any) {
if let pdfURL = pdfURLS {
self.webView.loadFileURL(pdfURL, allowingReadAccessTo: pdfURL.deletingLastPathComponent())
}
}
}
已附加图像参考。如果我使用不推荐使用的UIWebView,则不会出现此类问题,但是我不想使用不推荐使用的库。
答案 0 :(得分:1)
我们也在iOS的Firefox中也遇到了这个问题:
https://bugzilla.mozilla.org/show_bug.cgi?id=1516524
我还在WebKit错误中引用了此SO帖子:
https://bugs.webkit.org/show_bug.cgi?id=193281
目前,我们找到了一种解决方法:
let previousZoomScale = webView.scrollView.zoomScale
let previousContentOffset = webView.scrollView.contentOffset
if let currentItem = webView.backForwardList.currentItem {
webView.go(to: currentItem)
}
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(100)) {
webView.scrollView.setZoomScale(previousZoomScale, animated: false)
webView.scrollView.setContentOffset(previousContentOffset, animated: false)
}
基本上,我们从前进/后退历史记录列表中重新访问URL,从而重新绘制PDF,然后恢复滚动视图的位置/缩放。它不是很好,但是可以。
答案 1 :(得分:0)
通过在 viewWillAppear 中重新加载pdf数据解决了该问题。 到目前为止,它仍然有效。 首先从存储设备/网络加载数据。
var data: Data?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let data = data {
webView.load(data, mimeType: "application/pdf", characterEncodingName: "utf8", baseURL: URL(fileURLWithPath: ""))
}
}