2014-07-10 133 views
22

在我的應用程序中,我希望使WKWebView具有透明背景,因此背後的視圖(一個ImageView)可以顯示爲背景圖片。WKWebView的透明背景

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

上面的代碼與UIWebView工作正常,但如果webView是WKWebView,將顯示白色背景。

也嘗試在CSS中放置透明背景顏色。結果是一樣的,只能在UIWebView中使用,而不能在WKWebView中使用。任何建議?

回答

0

沒有和WKWebView工作還沒有,但即使UIWebView中曾經有過這個問題,解決辦法是包裹裏面的東西HTML內容是這樣的:

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

希望它能幫助。

+0

謝謝,試了一下,也把顏色:透明;在CSS文件中,也不起作用。背景總是白色的。 –

5

這個錯誤似乎是固定在測試版5.下

2

代碼工作對我來說:

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

SetValue:YES不允許使用ARC。 [NSNumber numberWithBool:YES]應該被使用。此外,對於WKWebView –

+0

@InnaKamoze謝謝,也沒有關鍵值編碼兼容的drawsTransparentBackground。你能否提供另一種可行的解決方案? – kisileno

+0

如果這些方法無法正常工作,則會導致WKWebView屬性崩潰或存在其他問題。無論如何,沒有這樣的方法drawsTransparentBackground和setValue ForKey不支持ARC –

4

此代碼可以幫助你。 Updated for Swift 3+

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

沒有爲我工作 –

0

我知道這是一個很老的問題。但我今天一直在努力。我不知道它是否只是我,但webView.backgroundColor在WKWebView中未定義,並且webView.opaque是隻讀的。對我來說,解決這個問題的唯一辦法是在Web視圖層背景色設置爲CGColor明確

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

和包含的NSView以同樣的方式

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

這只是爲我工作的事,我希望它可以幫助其他人。

+0

問題是關於iOS,而不是OSX –

16

在iOS設備上使用10+斯威夫特:

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

WKWebView.scrollView.backgroundColor默認情況下已清除顏色。 – CodePlumber

0

如果你加載PDF,想比標準不同的灰色背景色,似乎有必要等到文件被加載,然後清除子視圖的背景。與PDFView(iOS 11+)相比,使用WKWebView的優勢在於WKWebView具有雙擊縮放功能和內置的頁數計數指示器,並且與舊版本的iOS兼容。

需要注意的是,挖掘這種系統視圖並不是一個好習慣,因爲Apple可以隨時更改實現,有可能破壞解決方案。

這裏是我是如何實現一個PDF預覽控制器與斯威夫特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() 
     } 
    } 
}