😇
【Swift】UIButtonのtitleLabel.fontでフォントが変わらないときの対処法
iOS15からUIButtonの扱いが変更されました。
それに伴い、単にtitleLabel.font
で指定してもフォントを変えられなくなりました。
iOS15より前のバージョンをサポートする場合であっても使える対処法が以下となります。
if #available(iOS 15.0, *) {
button.configuration = nil
}
button.titleLabel?.font = UIFont(name: "Zapfino", size: 20)
}
iOS15のボタンには、基本的にPlain, Gray, Titted, Filledの4つのスタイルがあります。
スタイルはconfigurationで指定できるのですが、これはiOS15で追加されたものです。
そのため、iOS15より前もサポートする場合はボタンのスタイルをDefaultに変更する必要があります。
Storyboardで設定する、またはコードでconfigurationをnilとすることでDefaultとして扱うことが可能となります。
こうすることでiOS14まででやっていたフォントの変更が有効になります。
おまけ
iOS15より前のバージョンのサポート不要かつconfigurationがnilじゃない場合、以下の方法でうまくいきます。
が、もっと簡潔な書き方があるのでは?って思ってます。。
ご存じの方、コメントなり何なりでご教示いただけたら嬉しいです!
var config = UIButton.Configuration.plain()
var container = AttributeContainer()
container.font = UIFont(name: "Zapfino", size: 20)
config.attributedTitle = AttributedString("Button", attributes: container)
config.titleTextAttributesTransformer = UIConfigurationTextAttributesTransformer { incoming in
var outgoing = incoming
outgoing.font = UIFont(name: "Zapfino", size: 20)
return outgoing
}
button.configuration = config
参考
Discussion