ios - type - Fondo transparente para WKWebView
wkwebview before ios 11.0(nscoding support was broken in previous versions) (7)
En mi aplicación, deseo hacer el WKWebView con fondo transparente, para que la vista detrás (un ImageView) pueda mostrarse como una imagen de fondo.
webView!.opaque = false
webView!.backgroundColor = UIColor.clearColor()
El código anterior funciona bien con UIWebView, pero si webView es WKWebView, se mostrará un fondo blanco.
También se intentó poner color de fondo transparente en CSS. El resultado es el mismo, solo funciona en UIWebView pero no en WKWebView. ¿Cualquier sugerencia?
El siguiente código funciona para mí:
[wkWebView setValue:YES forKey:@"drawsTransparentBackground"];
Este código puede ayudarte. Actualizado para Swift 3+
self.webView = WKWebView()
self.webView.isOpaque = false
self.webView.backgroundColor = UIColor.clear
self.webView.scrollView.backgroundColor = UIColor.clear
Este error parece estar solucionado en Beta 5.
No he trabajado con WKWebView todavía, pero incluso UIWebView solía tener este problema y la solución era envolver el contenido html dentro de algo como esto:
webview.wantsLayer = true
webView.layer?.backgroundColor = NSColor.clearColor().CGColor
Espero eso ayude.
Para iOS 10+ utilizando Swift:
self.webView = WKWebView()
self.webView!.isOpaque = false
self.webView!.backgroundColor = UIColor.clear
self.webView!.scrollView.backgroundColor = UIColor.clear
Sé que esta es una pregunta muy antigua. Pero he estado luchando con esto hoy. No sé si solo soy yo, pero webView.backgroundColor no estaba definido en WKWebView, y webView.opaque era de solo lectura. La única forma en que puedo solucionar este problema fue establecer el color de fondo de la capa de vistas web en CGColor clear
webViewParent.layer?.backgroundColor = NSColor.clearColor().CGColor
y el NSView que contiene de la misma manera
class SomeViewController: UIViewController {
var observer: NSKeyValueObservation?
var url: URL
init(url: URL) {
self.url = url
super.init(nibName: nil, bundle: nil)
}
func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.black
let webView = WKWebView()
webView.translatesAutoResizingMaskIntoConstraints = false
self.view.addSubview(webView)
NSLayoutConstraint.activate([
webView.topAnchor.constraint(equalTo: self.view.topAnchor),
webView.leftAnchor.constraint(equalTo: self.view.leftAnchor),
webView.rightAnchor.constraint(equalTo: self.view.rightAnchor),
webView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
])
self.observer = webView.observe(/.isLoading, changeHandler: { (webView, change) in
webView.clearBackgrounds()
})
webView.loadFileURL(self.url, allowingReadAccessTo: self.url)
}
}
extension UIView {
func clearBackgrounds() {
self.backgroundColor = UIColor.clear
for subview in self.subviews {
subview.clearBackgrounds()
}
}
}
Eso es lo único que funcionó para mí, espero que también pueda ayudar a alguien más.
Si está cargando un PDF y desea un color de fondo diferente al gris estándar, parece que es necesario esperar hasta que se cargue el documento y luego borrar los fondos de las subvistas. La ventaja de usar un WKWebView
sobre un PDFView
(iOS 11+) es que los WKWebView
tienen doble toque para hacer zoom y un indicador de recuento de páginas incorporado, y son compatibles con versiones anteriores de iOS.
Debe tenerse en cuenta que no es una buena práctica profundizar en vistas del sistema como esta, ya que Apple puede cambiar la implementación en cualquier momento, lo que podría romper la solución.
Aquí es cómo implementé un controlador de vista previa de PDF con un fondo negro en Swift 4:
<body style="background-color:transparent;"></body>