首页 > 解决方案 > WKWebView 在边框内显示 pdf,我不想要边框

问题描述

我有一个自定义视图,它添加了这样的 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. 使用 .white 或 .clear设置视图、pdfWebView 和 pdfWebView.scrollView 背景

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

在此处输入图像描述

  1. 我使用了一个扩展来为所有子视图设置 .clear 颜色

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

没有任何方法可以删除边框。我无法编辑 pdf,因为这个是从 ws 下载的并在多个应用程序中使用。

标签: swiftpdfwkwebview

解决方案


解决方案:我找到了一个技巧,我认为您可以将它与具有白色背景的 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()

推荐阅读