Custom Font Not Working in WKWebView Swift
Reading the answers in the linked thread in DonMag's comment:
Using
@font-face
is mandatoryYou need multiple
@font-face
declarations to use multiple font files as a single font familyYou need to provide
baseURL
to make relative urls likeurl(OpenSans-Regular.ttf)
work
So, try this:
let htmlString = """ <style> @font-face { font-family: 'Open Sans'; font-weight: normal; src: url(OpenSans-Regular.ttf); } @font-face { font-family: 'Open Sans'; font-weight: bold; src: url(OpenSans-Bold.ttf); } @font-face { font-family: 'Open Sans'; font-weight: 900; src: url(OpenSans-ExtraBold.ttf); } @font-face { font-family: 'Open Sans'; font-weight: 200; src: url(OpenSans-Light.ttf); } @font-face { font-family: 'Open Sans'; font-weight: 500; src: url(OpenSans-Semibold.ttf); } </style> <span style="font-family: 'Open Sans'; font-weight: bold; font-size: 30; color: red">(Utils.aboutUsText)</span> """ webView.loadHTMLString(htmlString, baseURL: Bundle.main.bundleURL) //<-
Or you can use a separate css file if you prefer:
let htmlString = """ <link rel="stylesheet" type="text/css" href="open-sans.css"> <span style="font-family: 'Open Sans'; font-weight: bold; font-size: 30; color: red">(Utils.aboutUsText)</span> """ webView.loadHTMLString(htmlString, baseURL: Bundle.main.bundleURL)
open-sans.css:
@font-face{ font-family: 'Open Sans'; font-weight: normal; src: url(OpenSans-Regular.ttf);}@font-face{ font-family: 'Open Sans'; font-weight: bold; src: url(OpenSans-Bold.ttf);}@font-face{ font-family: 'Open Sans'; font-weight: 900; src: url(OpenSans-ExtraBold.ttf);}@font-face{ font-family: 'Open Sans'; font-weight: 200; src: url(OpenSans-Light.ttf);}@font-face{ font-family: 'Open Sans'; font-weight: 500; src: url(OpenSans-Semibold.ttf);}
class StaticContentViewControlle: WKUIDelegate, WKNavigationDelegate { @IBOutlet weak var webViewContainer: UIView! private var webView: WKWebView? var url = "" override func viewDidLoad() { super.viewDidLoad() initialSetup() } func initialSetup() { url = "https://www.apple.com" let myURL = URL(string: url) if let myURL = myURL { let myRequest = URLRequest(url: myURL) webView?.uiDelegate = self webView?.load(myRequest) } webView?.navigationDelegate = self webView?.scrollView.showsVerticalScrollIndicator = false webView?.scrollView.backgroundColor = .clear webView?.isOpaque = false webView?.backgroundColor = .clear } func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) { print("Start loading") } func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { print("End loading") let textSize = 300 let javascript = "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '\(textSize)%'" webView.evaluateJavaScript(javascript) { (response, error) in print() } } func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { if navigationAction.navigationType == .linkActivated { if let url = navigationAction.request.url, UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url) decisionHandler(.cancel) } else { print("Open it locally") decisionHandler(.allow) } } else { print("not a user click") decisionHandler(.allow) } }}