【问题标题】:WKWebView shows pdf inside a border, I don't want the borderWKWebView 在边框内显示 pdf,我不想要边框
【发布时间】:2019-01-11 10:17:23
【问题描述】:

我有一个自定义视图,可以像这样添加 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

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

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

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

没有办法移除边框。我无法编辑pdf,因为这是从ws下载并用于多个应用程序的。

【问题讨论】:

  • 您好,您可以尝试使用UIScreen.main.bounds 而不是.zero 来初始化WebView 吗?
  • 不,它不起作用。在webView(::didFinish) 中再次显示所有内容。 pdfWebView 将屏幕的一部分作为约束放置。 WKWebView(frame: ) 可以有任何框架。不要紧。无论如何谢谢。

标签: swift pdf wkwebview


【解决方案1】:

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

【讨论】:

  • stackoverflow.com/questions/16525065/…。这是 UIWebView 的解决方案,我正在使用 WKWebView。我试过了,也没有成功。
  • 知道了。我试图用示例 pdf 重现您的问题,但没有发生。你也可以上传高分辨率截图吗,因为我什么都看不到。
  • 已上传。我真的很讨厌那些占据所有窗口,但希望现在可以看到边框。 :)
  • 这在发布时有效。我遇到的问题是 pdf 被加载为数据,我没有找到将它放入这个生成的 html 的方法。虽然,我正在替换此自定义视图以使用适用于 iOS 11 + 的 PDFKit,并回退到适用于早期版本 iOS 的 WKWebKit。 PDFKit 不显示任何边框,这似乎是处理 pdf 的正确方式。
  • 该解决方案对我有用,但 pdf 会缩小以适应 web 视图而无需滚动。我删除了嵌入标签中的“height=100%”,它对我有用。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多