BLOGサブスレッドの日常
2021.04.20
SwiftUIでリンクテキストをダークモード対応
tama
tamaです。
さんざん悩んでいたコトがあっさり解決できたのでとり急ぎメモとして。
SwiftUIで「途中にリンクを含んだ文字列を表示したい」というニーズがありまして、
UITextView を UIViewRepresentable に入れて表示してあげたんです。
しかしこれがダークモードにならない(背景が黒くなっても文字は白いまま)。
UITextView の .textColor を明示したり、
こんな噂に惑わされて UIViewControllerRepresentable を使ったりといろいろ試したものの
どうしてもダークモードの文字が黒いまま。
原因は UITextView ではなく NSAttributedString(NSMutableAttributedString)にありました…
UITextView が表示するのは属性付き文字列(.attributedText)なので
色の指定は attribute として付けないといけない、と。
気付いてしまえばその通り…
let text = "このあたりがリンクになっています。"
let attributedText = NSMutableAttributedString(string: text, attributes: [.foregroundColor: UIColor.label])
みたいな!みたいな!
ちなみにリンク部分の文字色は UITextView の .linkTextAttributes で指定します。
textView.attributedText = attributedText
textView.linkTextAttributes = [.foregroundColor: UIColor.secondaryLabel]
(実際は UIColor.label や UIColor.secondaryLabel ではなく userInterfaceStyle に応じて色が変わる UIColor値を指定しています)
半年後の自分がまた時間を無駄にしないように備忘として。
(書いたら忘れないとは言っていない)
この記事を書いた人
tama
