HTML
Xcode
UITextView
Swift

【Swift】UITextViewに表示したHTMLのフォントサイズを変更する方法

フォントサイズを変更したい

【Swift】UITextViewにHTMLを表示する方法で、UITextViewにHTMLを表示することができましたが、フォントが小さかったのでフォントサイズを変更できるようにしてみました。

CSSを追加してみた

こちらの A Swift extension for String and HTML でHTMLにCSSを追加する方法が紹介されていたので、その方法を採用しました。ありがとうございます!

    static func parseHTML2Text(sourceText text: String, fontSize: CGFloat) -> NSAttributedString? {

        let htmlCSSString = "<style>" +
            "*" +
            "{" +
            "font-size: \(fontSize)pt;" +
            "font-family: Helvetica;" +
        "}</style>"
        let cssText = htmlCSSString + text
        let encodeData = cssText.data(using: String.Encoding.utf8, allowLossyConversion: true)
        let attributedOptions = [
            NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType as AnyObject,
            NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue as AnyObject
        ]

        var attributedString: NSAttributedString?
        if let encodeData = encodeData {
            do {
                attributedString = try NSAttributedString(
                    data: encodeData,
                    options: attributedOptions,
                    documentAttributes: nil
                )
            } catch {
                print("error: ", error)
                return nil
            }
        }

        return attributedString
    }

あとは、こちら↓のようにHTMLを変換するときにフォントサイズを指定して、UITextFieldのattributedTextに代入すればオッケーです。

    let htmlText = "<p>UITextFieldにHTMLを表示することができます。<font color=#ff0000>フォントの色</font>も変更できますし、<a href=\"https://www.apple.com/jp/\">リンク</a>も埋め込むことができます。</p>"
    let attributedString = NSAttributedString.parseHTML2Text(sourceText: htmlText, fontSize: 6.0)
    htmlTextView.attributedText = attributedString

文字列のなかに " [ダブルコーテーション]があるとエラーになります。[リンク]などでダブルコーテーションをつかうときは、 \ [バックスラッシュ]をダブルコーテーションのまえにつけてください。

実行すると、こちらのように指定したフォントサイズで表示されます。

スクリーンショット 2018-08-06 16.49.04.png