2014-07-10 20 views
22

In meiner App möchte ich den WKWebView mit transparentem Hintergrund gestalten, damit die dahinter liegende Ansicht (ein ImageView) als Hintergrundbild durchscheinen kann.Transparenter Hintergrund für WKWebView

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

Der obige Code funktioniert mit UIWebView in Ordnung, aber wenn webView WKWebView ist, wird ein weißer Hintergrund angezeigt.

Auch versucht, transparente Hintergrundfarbe in CSS setzen. Das Ergebnis ist das gleiche, funktioniert nur in UIWebView, aber nicht in WKWebView. Irgendein Vorschlag?

Antwort

0

Haben Sie nicht mit WKWebView noch gearbeitet, aber auch UIWebView verwendet, um dieses Problem zu haben, und die Lösung war die HTML-Inhalt in so etwas zu wickeln:

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

Hoffe, es hilft.

+0

Danke, versuchte es, und auch Putting Farbe: transparent; in CSS-Datei, funktioniert auch nicht. Der Hintergrund ist immer weiß. –

5

Dieser Fehler scheint 5. in Beta fixiert werden unter

2

-Code funktioniert für mich:

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

SetValue: YES ist mit ARC nicht erlaubt. [NSNummer numberWithBool: YES] sollte verwendet werden. Und es gibt auch keine Schlüsselwert-Codierung-konforme drawTransparentBackground für das WKWebView –

+0

@InnaKamoze Dank. Könnten Sie bitte eine andere Lösung anbieten, die funktioniert? – kisileno

+0

Wenn diese Methode nicht funktioniert, ist etwas WKWebView-Eigenschaften zertrümmert oder ein anderes Problem existiert. Wie auch immer, es gibt keine Methode wie drawTransparentBackground und setValue ForKey nicht unterstützt für ARC –

4

Dieser Code könnte Ihnen helfen. Für Swift 3+ aktualisiert

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

hat nicht für mich funktioniert –

0

Ich weiß, das ist eine sehr alte Frage. Aber ich habe heute damit zu kämpfen. Ich weiß nicht, ob es nur ich ist, aber webView.backgroundColor war in WKWebView undefiniert, und webView.opaque war schreibgeschützt. Der einzige Weg für mich, dies zu beheben war die Webansichten Schicht Hintergrundfarbe auf den CGColor klar

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

und enthalten NSView die gleiche Art und Weise

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

zu setzen, dass die einzige Sache, die für mich gearbeitet Ich hoffe, es könnte auch anderen helfen.

+0

die Frage ist über iOS, nicht OSX –

16

Für iOS 10+ mit Swift:

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

WKWebView.scrollView.backgroundColor ist standardmäßig klar Farbe bereits. – CodePlumber

0

Wenn Sie eine PDF sind Laden und wollen eine Hintergrundfarbe anders als die Standard-grau, scheint es, dass es notwendig ist, das Dokument zu warten, bis geladen ist, Löschen Sie dann die Hintergründe der Unteransichten. Der Vorteil der Verwendung einer WKWebView über eine PDFView (iOS 11+) besteht darin, dass WKWebView s Doppeltippen zum Zoomen und eine integrierte Seitenzahlanzeige haben und mit älteren Versionen von iOS kompatibel sind.

Es ist anzumerken, dass es keine großartige Übung ist, sich in Systemansichten zu vertiefen, da Apple die Implementierung jederzeit ändern kann, wodurch die Lösung möglicherweise zerstört wird.

Hier ist, wie ich einen PDF-Vorschau-Controller mit einem schwarzen Hintergrund in Swift implementiert 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() 
     } 
    } 
} 
Verwandte Themen