Ответ 1
Для iOS 10+ с использованием Swift:
self.webView = WKWebView()
self.webView!.isOpaque = false
self.webView!.backgroundColor = UIColor.clear
self.webView!.scrollView.backgroundColor = UIColor.clear
В моем приложении я хочу сделать WKWebView прозрачным фоном, поэтому вид сзади (ImageView) может отображаться как фоновое изображение.
webView!.opaque = false
webView!.backgroundColor = UIColor.clearColor()
Код выше отлично работает с UIWebView, но если webView WKWebView, будет показан белый фон.
Также попытался поставить прозрачный цвет фона в CSS. Результат тот же, работает только в UIWebView, но не WKWebView. Любое предложение?
Для iOS 10+ с использованием Swift:
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
перед 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()
}
}
}
Не работал с WKWebView, но даже UIWebView использовал эту проблему, и решение заключалось в том, чтобы обернуть содержимое html внутри чего-то вроде этого:
<body style="background-color:transparent;"></body>
Надеюсь, что это поможет.
Я знаю, что это очень старый вопрос. Но сегодня я борюсь с этим. Я не знаю, было ли это только мне, но webView.backgroundColor был undefined в WKWebView, а webView.opaque был доступен только для чтения. Единственный способ для меня исправить это - установить цвет фона слоев веб-представлений на CGColor clear
webview.wantsLayer = true
webView.layer?.backgroundColor = NSColor.clearColor().CGColor
и содержащего NSView таким же образом
webViewParent.layer?.backgroundColor = NSColor.clearColor().CGColor
Это единственное, что сработало для меня, я надеюсь, что это тоже поможет кому-то другому.
using objective c.
wkWebView.backgroundColor = [UIColor clearColor];
wkWebView.scrollView.backgroundColor = [UIColor clearColor];
wkWebView.opaque = false;
Это удалит белый цвет фона в wkwebView.