私のアプリでは、背景が透明なWKWebViewを作成して、背後のビュー(ImageView)が背景画像として透けて見えるようにします。
webView!.opaque = false
webView!.backgroundColor = UIColor.clearColor()
上記のコードはUIWebViewで正常に機能しますが、webViewがWKWebViewの場合、白い背景が表示されます。
また、CSSに透明な背景色を入れてみました。結果は同じで、UIWebViewでのみ機能し、WKWebViewでは機能しません。なにか提案を?
Swiftを使用するiOS 10以降の場合:
self.webView = WKWebView()
self.webView!.isOpaque = false
self.webView!.backgroundColor = UIColor.clear
self.webView!.scrollView.backgroundColor = UIColor.clear
このコードが役に立つかもしれません。 Swift 3+
self.webView = WKWebView()
self.webView.isOpaque = false
self.webView.backgroundColor = UIColor.clear
self.webView.scrollView.backgroundColor = UIColor.clear
このバグはベータ5で修正されたようです。
以下のコードは私のために機能します:
[wkWebView setValue:YES forKey:@"drawsTransparentBackground"];
PDFをロードしていて、標準のグレーとは異なる背景色が必要な場合は、ドキュメントがロードされるまで待ってから、サブビューの背景をクリアする必要があるようです。 WKWebView
(iOS 11+)よりもPDFView
を使用する利点は、WKWebView
sにダブルタップしてズームする機能とページ数インジケーターが組み込まれており、古いバージョンと互換性があることです。 iOSのバージョン。
Appleは、実装をいつでも変更でき、ソリューションを破壊する可能性があるため、.
PDFプレビューコントローラを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()
}
}
}
これは非常に古い質問です。しかし、私は今日これに苦労しています。私だけなのかわかりませんが、webView.backgroundColorはWKWebViewでは未定義で、webView.opaqueは読み取り専用でした。これを修正する唯一の方法は、Webビューレイヤーの背景色をCGColor clearに設定することでした
webview.wantsLayer = true
webView.layer?.backgroundColor = NSColor.clearColor().CGColor
nSViewも同じ方法で
webViewParent.layer?.backgroundColor = NSColor.clearColor().CGColor
それは私のために働いた唯一のものであり、私はそれが他の誰かにも役立つことを願っています。
WKWebViewとはまだ連携していませんが、UIWebViewでもこの問題が発生していました。解決策は、htmlコンテンツを次のようなものでラップすることでした。
<body style="background-color:transparent;"></body>
それが役に立てば幸い。