はじめに
iOS 15 から Markdown テキストを表示できるようになりました。AttributedString を使うので UILabel
や UITextView
では使えないと思っていましたが NSAttributedString にも似たメソッドがあることに気づきました。こちらを使えば UIKit でも Markdown 表示できそうです。
実装
実装はかんたんで下記のようにすると UILabel
に表示できます。
1 |
label.attributedText = try! .init(markdown: "通常文字 ~取り消し線~ **強調** *イタリック* [リンクみてね](https://www.am10.blog/)") |
こんな感じ。
改行
改行したい場合は options に inlineOnlyPreservingWhitespace
を指定します。
1 2 |
label.numberOfLines = 0 label.attributedText = try! .init(markdown: "通常文字\n~取り消し線~\n**強調**\n*イタリック*\n [リンクみてね](https://www.am10.blog/)", options: .init(interpretedSyntax: .inlineOnlyPreservingWhitespace)) |
InterpretedSyntax
には他にも下記があるようですがよくわかりませんでした。。。
AttributedString.MarkdownParsingOptions.InterpretedSyntax
case full
A syntax value that interprets the full Markdown syntax and produces all relevant attributes.
case inlineOnly
A syntax value that parses all Markdown text, but interprets only attributes that apply to inline spans.
case inlineOnlyPreservingWhitespace
A syntax value that parses all Markdown text, but interprets only attributes that apply to inline spans, preserving white space.
対応している記法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
label.numberOfLines = 0 label.attributedText = try! .init( markdown: """ 通常文字\n ~取り消し線~\n **強調**\n *イタリック*\n [リンクみてね](https://www.am10.blog/)\n # 見出し1\n ## 見出し2\n - リスト1\n - リスト2\n \n 1. 番号付きリスト1\n 1. 番号付きリスト2\n \n > 引用\n \n `コード`\n \n """, options: .init(interpretedSyntax: .inlineOnlyPreservingWhitespace)) |
上記を試してみたところこんな感じでした。
取り消し線、強調、イタリック、リンク以外は対応していなさそうでした。
おわりに
Markdown 表示は SwiftUI しか無理だと思っていましたが UIKit でもできました!
参考
- New lines not being rendered in SwiftUI's markdown
- SwiftUIアプリでマークダウンテキストを表示する
- 【SwiftUI】Markdownテキストを表示する方法
コメント