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

时间:2019-01-11 10:17:24

标签: swift pdf wkwebview

我有一个自定义视图,该视图添加了这样的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
    }
}

结果是这样的:

有一个灰色边框。

full border

我已经尝试过了:

  1. 使用.white或.clear

  2. 设置视图的pdfWebView和pdfWebView.scrollView 背景
  3. webView.isOpaque = false(这是除去灰色底部的唯一对象,但不包括边框)

enter image description here

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

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

删除边框无效。我无法编辑pdf,因为该pdf是从ws下载的,并且已在多个应用中使用。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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