swift - 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
}
}
结果是这样的:
有一个灰色边框。
我试过这个:
使用 .white 或 .clear设置视图、pdfWebView 和 pdfWebView.scrollView 背景
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()
推荐阅读
- firebase - 颤动:在 null 上调用的 getter 文档会显示一段时间
- sql - 从表中的日历中选择工作日
- swift - Swift 框架“未找到模块‘RealityKit’”
- python-3.x - 在多处理嵌套循环和字典中面临问题
- php - 在 Braintree 中创建子商家账户会出现“主商家账户 ID 无效”错误
- java - 是否可以在 Java 中使用 Mockito 模拟语句?
- python - 如何在文件中添加引号
- regex - regex ~ delimited string 在看到 ~~ 并跳过一列时变得混乱
- r - 如何在 ggerrorplot 中包含 x 值之间的不等距离?
- azure-devops - 我可以将代码从 Azure devops 推送到 Azure VM 吗?