Custom Font Not Working in WKWebView Swift Custom Font Not Working in WKWebView Swift xcode xcode

Custom Font Not Working in WKWebView Swift


Reading the answers in the linked thread in DonMag's comment:

  • Using @font-face is mandatory

  • You need multiple @font-face declarations to use multiple font files as a single font family

  • You need to provide baseURL to make relative urls like url(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)        }    }}