Tengo una vista personalizada que agrega un WKWebView como este:
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 }Cuando termina la carga, tengo esto:
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() }) }Tuve que ajustar las inserciones, porque en el iPhone X, a veces el pdf se pegaba en la parte inferior, en lugar de en la parte superior.
extension WKWebView { func adjustInsets() { parentViewController?.automaticallyAdjustsScrollViewInsets = false scrollView.contentInset = .zero scrollView.scrollIndicatorInsets = .zero scrollView.contentOffset = .zero } }El resultado es este:
Hay un borde gris.
He intentado esto:
configuración de vista, pdfWebView y pdfWebView.scrollView fondo con .white o .clear
webView.isOpaque = false (este es el único que elimina la parte inferior del gris, pero no el borde)
He usado una extensión para establecer el color .clear en todas las vistas secundarias
extension UIView { func clearBackgrounds() { self.backgroundColor = UIColor.clear for subview in self.subviews { subview.clearBackgrounds() } } }Nada funciona para eliminar el borde . No puedo editar el pdf, porque este se descarga de ws y se usa en varias aplicaciones.
Solución: Encontré un truco para hacer esto, creo que puedes usarlo con un pdf que tenga un fondo blanco. Tiene la idea, puedes manipular esto con tu diseño.
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)Editar: si desea usar esto con datos PDF codificados en base64, puede usarlo con eso:
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: "")) }Respuesta anterior: desactivar "WebKitDiskImageCacheEnabled" puede solucionar este problema. ¿Puedes probar esto antes de cargar el pdf?
UserDefaults.standard.set(false, forKey: "WebKitDiskImageCacheEnabled") UserDefaults.standard.synchronize()Usaré PDFKit para iOS 11 + en esta vista personalizada con el respaldo de WKWebView para versiones anteriores. PDFView no tiene ningún fondo gris.