2014-07-10 39 views
22

Nella mia app desidero rendere WKWebView con sfondo trasparente, in modo che la vista dietro (un ImageView) possa essere visualizzata come immagine di sfondo.Sfondo trasparente per WKWebView

webView!.opaque = false 
    webView!.backgroundColor = UIColor.clearColor() 

Il codice precedente funziona bene con UIWebView, ma se WebView è WKWebView, verrà mostrato uno sfondo bianco.

Anche provato a mettere il colore di sfondo trasparente in CSS. Il risultato è lo stesso, funziona solo in UIWebView ma non in WKWebView. Qualche suggerimento?

risposta

0

Non ho lavorato con WKWebView ancora, ma anche UIWebView usato per avere questo problema e la soluzione era quella di avvolgere il contenuto HTML all'interno di qualcosa di simile:

<body style="background-color:transparent;"></body> 

Speranza che aiuta.

+0

Grazie, l'ho provato, e anche mettere il colore: trasparente; nel file css, inoltre, non funziona. Lo sfondo è sempre bianco. –

5

Questo bug sembra essere fissati in Beta 5.

2

codice qui sotto funziona per me:

[wkWebView setValue:YES forKey:@"drawsTransparentBackground"]; 
+0

SetValue: YES non è consentito con ARC. [NSNumber numberWithBool: YES] dovrebbe essere usato. Inoltre, non vi è alcun valore chiave per il disegno di codificaTransparentBackground per WKWebView –

+0

@InnaKamoze, grazie. Potresti fornire altre soluzioni che funzionino? – kisileno

+0

Se questo metodo non funziona, qualcosa si spacca le proprietà WKWebView o esiste un altro problema. Ad ogni modo non esiste un metodo come drawsTransparentBackground e setValue ForKey non supportato per ARC –

4

Questo codice potrebbe aiutare. Aggiornato per Swift 3+

self.webView = WKWebView() 
self.webView.isOpaque = false 
self.webView.backgroundColor = UIColor.clear 
self.webView.scrollView.backgroundColor = UIColor.clear 
+0

non ha funzionato per me –

0

So che questa è una domanda molto vecchia. Ma ho lottato con questo oggi. Non so se sono solo io, ma webView.backgroundColor non era definito in WKWebView e webView.opaque era di sola lettura. L'unico modo per me per risolvere questo problema è stato quello di impostare il colore di sfondo strato di vista Web per la CGColor chiaro

webview.wantsLayer = true 
webView.layer?.backgroundColor = NSColor.clearColor().CGColor 

e contenente NSView allo stesso modo

webViewParent.layer?.backgroundColor = NSColor.clearColor().CGColor 

che è l'unica cosa che ha funzionato per me , Spero che possa aiutare qualcun altro.

+0

la domanda riguarda iOS, non OSX –

16

Per iOS 10+ usando Swift:

self.webView = WKWebView() 
self.webView!.isOpaque = false 
self.webView!.backgroundColor = UIColor.clear 
self.webView!.scrollView.backgroundColor = UIColor.clear 
+0

WKWebView.scrollView.backgroundColor è già di default con colore chiaro. – CodePlumber

0

Se si sta caricando un file PDF e si desidera un colore di sfondo diverso rispetto al grigio standard, sembra che sia necessario attendere fino a quando viene caricato il documento, quindi cancella gli sfondi delle sottoview. Il vantaggio dell'uso di WKWebView su un PDFView (iOS 11+) è che gli WKWebView s hanno il doppio tocco per lo zoom e un indicatore di conteggio delle pagine integrato e sono compatibili con le versioni precedenti di iOS.

Va notato che non è una buona pratica scavare in viste di sistema come questa, in quanto Apple può modificare l'implementazione in qualsiasi momento, potenzialmente rompendo la soluzione.

Ecco come ho implementato un controller PDF di anteprima con uno sfondo nero a Swift 4:

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() 
     } 
    } 
}