Xcode13より、UIButtonには新しい設定方法(UIButton.Configuration
)が追加されており、Xcode13のStoryboardで新しくUIButtonを貼り付けると、新しい設定方法を使用したボタンが貼り付けられます。
新しい設定方法が使用されたUIButtonは、StoryboardのUIButtonの設定でStyleの項目が「Plain」「Gray」「Tinted」「Filled」のいずれかになっています。ここのStyleの設定を「Default」にすると、従来通りの設定方法になり、 setTitle
でタイトルを変更しても、Storybordで設定したフォントサイズが維持されます。
新しい設定を使用したボタンに対して setTitle
メソッドでタイトルを変更すると、タイトル自体は変更できますが、フォントの設定がリセットされ、 titleLabel?.font
にフォントを設定してもフォントの変更ができなくなりました。(おそらく新しい設定方法と古い設定方法が混在した時の動作は保証されないということなのだろうと思います。)
新しい設定方法では、ボタンのタイトルをメインタイトルとサブタイトルの2行で表示できるようになっていて、後でボタンのタイトルを変更する時は、
swift
1button.configuration?.title = "Title"
2button.configuration?.subtitle = "SubTitle"
のように、 UIButton.Configuration
のプロパティを変更します。ただ、これを設定するとフォントの設定がリセットされてしまうようで、上記の設定を実施した後、
swift
1button.titleLabel?.font = UIFont.systemFont(ofSize: 48)
2button.subtitleLabel?.font = UIFont.systemFont(ofSize: 48)
のようにすれば、それぞれのタイトルのフォントも設定できました。
2022/12/25追記
上記の回答では、configurationの設定を実施した後にtitleLabelのfontを変更したらうまくいったこと説明しましたが、やはりそれは新しい設定方法と古い設定方法を混在させた方法になるので安定しないようです。タイトルを再設定したりすると、結局うまく動作できなくなることを確認しました。
UIButton.Configuration
を使用してボタンを設定した場合は、 UIButton.Configuration
の設定で表示フォントを変更するのが本来のやり方だと思います。
https://stackoverflow.com/a/73360912
の回答が参考になりますが、下記のようにconfigurationのtitleTextAttributesTransformerを使ってフォントサイズを設定すると、安定して動作するようです。
swift
1button.configuration?.titleTextAttributesTransformer = UIConfigurationTextAttributesTransformer { incoming in
2 var outgoing = incoming
3 outgoing.font = UIFont.systemFont(ofSize: 48)
4 return outgoing
5}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/17 00:35