WKWebView显示灰色背景,并且pdf内容在ViewController开关上不可见

时间:2018-10-10 07:46:54

标签: ios swift ipad wkwebview

我正在从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())
        }
    }
}

有人对这个问题有想法吗?enter image description here

已附加图像参考。如果我使用不推荐使用的UIWebView,则不会出现此类问题,但是我不想使用不推荐使用的库。

2 个答案:

答案 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: ""))
  }
}