Подтвердить что ты не робот

Прозрачный фон для WKWebView

В моем приложении я хочу сделать WKWebView прозрачным фоном, поэтому вид сзади (ImageView) может отображаться как фоновое изображение.

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

Код выше отлично работает с UIWebView, но если webView WKWebView, будет показан белый фон.

Также попытался поставить прозрачный цвет фона в CSS. Результат тот же, работает только в UIWebView, но не WKWebView. Любое предложение?

4b9b3361

Ответ 1

Для iOS 10+ с использованием Swift:

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

Ответ 2

Этот код может вам помочь. Обновлено для Swift 3 +

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

Ответ 3

Эта ошибка, по-видимому, исправлена ​​в бета-версии 5.

Ответ 4

Код ниже работает для меня:

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

Ответ 5

Если вы загружаете PDF файл и хотите, чтобы цвет фона отличался от стандартного серого, кажется, что необходимо дождаться загрузки документа, а затем очистить фон подпредставлений. Преимущество использования WKWebView перед PDFView (iOS 11+) заключается в том, что WKWebView имеет встроенный двойной зум для масштабирования и индикатор количества страниц и совместимы со старыми версиями 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()
        }
    }
}

Ответ 6

Не работал с WKWebView, но даже UIWebView использовал эту проблему, и решение заключалось в том, чтобы обернуть содержимое html внутри чего-то вроде этого:

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

Надеюсь, что это поможет.

Ответ 7

Я знаю, что это очень старый вопрос. Но сегодня я борюсь с этим. Я не знаю, было ли это только мне, но webView.backgroundColor был undefined в WKWebView, а webView.opaque был доступен только для чтения. Единственный способ для меня исправить это - установить цвет фона слоев веб-представлений на CGColor clear

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

и содержащего NSView таким же образом

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

Это единственное, что сработало для меня, я надеюсь, что это тоже поможет кому-то другому.

Ответ 8

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

Это удалит белый цвет фона в wkwebView.