WKWebView 在边框内显示 pdf,我不想要边框

WKWebView shows pdf inside a border, I don't want the border

我有一个自定义视图,它添加了一个 WKWebView,如下所示:

 override func awakeFromNib() {
    super.awakeFromNib()
    loadWebView()
}

func loadWebView() {
    pdfWebView = WKWebView(frame: .zero)

    pdfWebView.navigationDelegate = self
    pdfWebView.translatesAutoresizingMaskIntoConstraints = false
    pdfWebView.isHidden = true
    self.addSubview(pdfWebView)
    ... add constrains to self anchors - top, left, right, bottom
}

加载完成后,我有这个:

  func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.8, execute: {
        SVProgressHUD.dismiss()
        webView.isHidden = false
        webView.isOpaque = true
        webView.adjustInsets()
    })
}

我不得不调整插图,因为在 iPhone X 上,有时 pdf 会粘在底部,而不是顶部。

extension WKWebView {
    func adjustInsets() {
        parentViewController?.automaticallyAdjustsScrollViewInsets = false
        scrollView.contentInset = .zero
        scrollView.scrollIndicatorInsets = .zero
        scrollView.contentOffset = .zero
    }
}

结果是这样的:

有灰色边框。

我试过这个:

  1. 设置视图、pdfWebView 和 pdfWebView.scrollView 背景 为 .white 或 .clear

  2. webView.isOpaque = false(这是唯一一个去除灰色底部的部分 - 但不是边框)

  1. 我使用扩展程序为所有子视图设置了 .clear 颜色

    extension UIView {
        func clearBackgrounds() {
            self.backgroundColor = UIColor.clear
            for subview in self.subviews {
                subview.clearBackgrounds()
            }
        }
    } 
    

无法删除边框。我无法编辑pdf,因为这个是从ws下载的,在多个应用程序中使用。

解决方案: 我找到了一个技巧来做到这一点,我认为你可以将它与具有白色背景的 pdf 一起使用。它有想法,你可以用你的设计来操纵它。

self.view.backgroundColor = UIColor.white
let urlString = "http://www.africau.edu/images/default/sample.pdf"
let string = "<html><body marginwidth=\"0\" marginheight=\"0\" style=\"background-color: transparent\"><embed width=\"100%\" height=\"100%\" name=\"plugin\" src=\"\(urlString)\" type=\"application/pdf\"></body></html>"
webView.loadHTMLString(string, baseURL: nil)

编辑:如果你想将它与 base64 编码的 pdf 数据一起使用,你可以与它一起使用:

var pdfBase64String = "" //Your pdf data
if let decodedData = Data(base64Encoded: pdfBase64String, options: .ignoreUnknownCharacters) {
        pdfWebView.load(decodedData, mimeType: "application/pdf", characterEncodingName: "utf-8", baseURL: URL(fileURLWithPath: ""))
}

旧答案:关闭 "WebKitDiskImageCacheEnabled" 可以解决这个问题。 你能在加载 pdf 之前试试这个吗?

UserDefaults.standard.set(false, forKey: "WebKitDiskImageCacheEnabled")
UserDefaults.standard.synchronize()

我将在这个自定义视图中使用 iOS 11 + 的 PDFKit,并回退到早期版本的 WKWebView。 PDFView 没有任何灰色背景。