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
}
}
结果是这样的:
有灰色边框。
我试过这个:
设置视图、pdfWebView 和 pdfWebView.scrollView 背景 为 .white 或 .clear
webView.isOpaque = false
(这是唯一一个去除灰色底部的部分 - 但不是边框)
我使用扩展程序为所有子视图设置了 .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 没有任何灰色背景。
我有一个自定义视图,它添加了一个 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
}
}
结果是这样的:
有灰色边框。
我试过这个:
设置视图、pdfWebView 和 pdfWebView.scrollView 背景 为 .white 或 .clear
webView.isOpaque = false
(这是唯一一个去除灰色底部的部分 - 但不是边框)
我使用扩展程序为所有子视图设置了 .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 没有任何灰色背景。