Как изменить цвет текста в WKWebVIew?
У меня есть ViewController с WKWebView, я загружаю файлы .html и .css с текстом для webView.
Это похоже на контроллер для чтения книг в приложении Apple Books.
do {
guard
let filePath = Bundle.main.path(forResource: "index", ofType: "html")
else {
print("File reading error")
return
}
let headerString = "<meta name=\"viewport\" content=\"initial-scale=1.1\" />"
let content = try String(contentsOfFile: filePath, encoding: .utf8)
let baseUrl = URL(fileURLWithPath: filePath)
webView.loadHTMLString(headerString + content, baseURL: baseUrl)
} catch {
print("File HTML error")
}
Также у меня есть 4 темы для изменения внешнего вида в ViewController (белая, черная, темно-синяя и желтая, как в Apple Books).
Я хочу менять цвет текста в webView при изменении темы.
Как это сделать? Как изменить цвет webView?
Ответы (1 шт):
Может немного извращенный способ (в HTML я вообще не силен), но можно например так :) Пример использования в виде строчки в вашем коде:
do {
guard let filePath = Bundle.main.path(forResource: "index", ofType: "html")
else {
print ("File reading error")
return
}
let headerString = "<meta name=\"viewport\" content=\"initial-scale=1.1\" />"
var content = try String(contentsOfFile: filePath, encoding: .utf8)
let baseUrl = URL(fileURLWithPath: filePath)
content.changeHtmlStyle(font: "Papyrus", fontSize: 5, fontColor: "red") // Эта строчка кода - пример использования.
webView.loadHTMLString(headerString+content, baseURL: baseUrl)
}
catch {
print ("File HTML error")
}
Расширение для String для изменения формата HTML. Это можно добавить в любом месте приложения, вне какого-либо класса, например, под классом вашего вывода текста.
extension String {
mutating func changeHtmlStyle(font: String, fontSize: Int, fontColor: String) {
let style = "<font face='\(font)' size='\(fontSize)' color= '\(fontColor)'>%@"
self = String(format: style, self)
}
}