WKWebView的透明背景

时间:2014-07-10 22:20:54

标签: ios swift wkwebview

在我的应用程序中,我希望使用透明背景制作WKWebView,因此后面的视图(一个ImageView)可以显示为背景图片。

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

上面的代码适用于UIWebView,但如果webView是WKWebView,则会显示白色背景。

还尝试在CSS中添加透明背景颜色。结果是相同的,只适用于UIWebView但不适用于WKWebView。有什么建议吗?

11 个答案:

答案 0 :(得分:36)

对于使用Swift的iOS 10+:

| parse tostring(dayofweek(timestamp)) with dayOfWeek:int ".00:00:00"

答案 1 :(得分:15)

此代码可能对您有所帮助。更新了Swift 3 +

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

答案 2 :(得分:5)

此错误似乎已在Beta 5中修复。

答案 3 :(得分:3)

以下代码对我有用:

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

答案 4 :(得分:1)

如果您要加载PDF并希望背景颜色与标准灰色不同,则似乎需要等到文档加载完毕,然后清除子视图的背景。使用WKWebView优于PDFView(iOS 11+)的优势在于WKWebView具有双击缩放功能和内置页数指示符,并且与旧版本兼容iOS版

应该注意的是,挖掘这样的系统视图并不是一个很好的做法,因为Apple可以随时改变实施,可能会破坏解决方案。

以下是我在Swift 4中使用黑色背景实现PDF预览控制器的方法:

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

答案 5 :(得分:1)

enter image description here

在Interface Builder中取消选中Opaque复选框

答案 6 :(得分:0)

还没有使用WKWebView,但即便是UIWebView也有这个问题,解决方法是将html内容包装在这样的内容中:

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

希望它有所帮助。

答案 7 :(得分:0)

我知道这是一个非常古老的问题。但我今天一直在努力解决这个问题。我不知道它是否仅仅是我,但是在WKWebView中未定义webView.backgroundColor,并且webView.opaque是只读的。我解决这个问题的唯一方法是将Web视图图层背景颜色设置为CGColor clear

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

和包含NSView的方式相同

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

这是唯一对我有用的东西,我希望它也可以帮助别人。

答案 8 :(得分:0)

using objective c.
wkWebView.backgroundColor = [UIColor clearColor];
wkWebView.scrollView.backgroundColor = [UIColor clearColor];
wkWebView.opaque = false;

它将删除wkwebView中的白色背景颜色。

答案 9 :(得分:0)

我不知道它是否可以帮助您,但我在下面使用了此解决方案:

func setBackgroundWhite(subviews: [UIView]) {
  for subview in subviews {
    subview.backgroundColor = .white
    setBackgroundWhite(subviews: subview.subviews)
  }
 }

这会在子视图中进行内部递归调用,将背景设置为白色或其他颜色。

我在加载PDF文件,WKWebView和iOS 10+时使用了此代码

答案 10 :(得分:0)

WKWebView for macOS with Objective-C

这是 macOS 中透明 WKWebView 视图的魔法线。

[webView setValue:[NSNumber numberWithBool: YES] forKey:@"drawsTransparentBackground"];