Ios WKWebView显示灰色背景,pdf内容在viewcontroller开关上不可见

Ios WKWebView显示灰色背景,pdf内容在viewcontroller开关上不可见,ios,swift,ipad,wkwebview,Ios,Swift,Ipad,Wkwebview,我正在从WKWebView的主捆绑包或文档目录加载pdf文件。最初它的加载非常完美,但它显示灰色背景,如果我在tabbar控制器中切换tab后回到同一屏幕,pdf内容将不可见。这是我用来加载的代码 class ViewController: UIViewController { @IBOutlet var progressView: UIProgressView! @IBOutlet var webView: WKWebView! var pdfURLS: URL?

我正在从WKWebView的主捆绑包或文档目录加载pdf文件。最初它的加载非常完美,但它显示灰色背景,如果我在tabbar控制器中切换tab后回到同一屏幕,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,则不会出现此类问题,但我不想使用不推荐使用的库。

我们在Firefox for iOS中也遇到了此问题:

我还在WebKit bug中引用了这篇SO帖子:

目前,我们找到了一个解决办法:

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,然后恢复scrollview位置/缩放。这不是很好,但它可以工作。

通过在ViewWillDisplay中重新加载pdf数据解决了这个问题。 到目前为止,它是有效的。 首先从存储器/web加载数据

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

可能您的PDF url即将发布@失败者不,不是。如果我使用不推荐使用的UIWebView,就不会有这样的问题,但我不想使用不推荐使用的库。我在iPhone XR模拟器上尝试过,我遇到了这个问题。而且,在真正的设备上,它实际上不工作。这一定是iOS 12的一个bug。返回视图时,我也会看到灰色屏幕(在最初加载良好后)。我试过的每个iOS 12模拟器和我的iOS 12设备都会出现这种情况。在iOS 12之前我从未遇到过这个问题。我检查了一个正常的网站(apple.com)是否正常,它是否正常。它似乎不仅不适用于PDF…在iOS 13.2.2上检查,问题仍然没有解决如果用户在设置contentOffset值的情况下放大了内容,PDF将返回到第一页。。似乎zoomScale的设置出于某种原因正在重置contentOffset,即使zoomScale是在contentOffset之前设置的:(