回答編集履歴

1

回答追記

2022/12/25 02:34

投稿

TakeOne
TakeOne

スコア6299

test CHANGED
@@ -1,37 +1,38 @@
1
1
  Xcode13より、UIButtonには新しい設定方法(`UIButton.Configuration`)が追加されており、Xcode13のStoryboardで新しくUIButtonを貼り付けると、新しい設定方法を使用したボタンが貼り付けられます。
2
-
3
-
4
2
 
5
3
  新しい設定方法が使用されたUIButtonは、StoryboardのUIButtonの設定でStyleの項目が「Plain」「Gray」「Tinted」「Filled」のいずれかになっています。ここのStyleの設定を「Default」にすると、従来通りの設定方法になり、 `setTitle` でタイトルを変更しても、Storybordで設定したフォントサイズが維持されます。
6
4
 
7
-
8
-
9
5
  新しい設定を使用したボタンに対して `setTitle`メソッドでタイトルを変更すると、タイトル自体は変更できますが、フォントの設定がリセットされ、 `titleLabel?.font` にフォントを設定してもフォントの変更ができなくなりました。(おそらく新しい設定方法と古い設定方法が混在した時の動作は保証されないということなのだろうと思います。)
10
-
11
-
12
6
 
13
7
  新しい設定方法では、ボタンのタイトルをメインタイトルとサブタイトルの2行で表示できるようになっていて、後でボタンのタイトルを変更する時は、
14
8
 
15
-
9
+ ``` swift
10
+ button.configuration?.title = "Title"
11
+ button.configuration?.subtitle = "SubTitle"
12
+ ```
13
+ のように、 `UIButton.Configuration` のプロパティを変更します。ただ、これを設定するとフォントの設定がリセットされてしまうようで、上記の設定を実施した後、
16
14
 
17
15
  ``` swift
16
+ button.titleLabel?.font = UIFont.systemFont(ofSize: 48)
17
+ button.subtitleLabel?.font = UIFont.systemFont(ofSize: 48)
18
+ ```
19
+ のようにすれば、それぞれのタイトルのフォントも設定できました。
18
20
 
19
- button.configuration?.title = "Title"
21
+ 2022/12/25追記
22
+ ---
23
+ 上記の回答では、configurationの設定を実施した後にtitleLabelのfontを変更したらうまくいったこと説明しましたが、やはりそれは新しい設定方法と古い設定方法を混在させた方法になるので安定しないようです。タイトルを再設定したりすると、結局うまく動作できなくなることを確認しました。
20
24
 
21
- button.configuration?.subtitle = "SubTitle"
25
+ `UIButton.Configuration` を使用してボタンを設定した場合は、 `UIButton.Configuration` の設定で表示フォントを変更するのが本来のやり方だと思います。
22
26
 
27
+ https://stackoverflow.com/a/73360912
28
+
29
+ の回答が参考になりますが、下記のようにconfigurationのtitleTextAttributesTransformerを使ってフォントサイズを設定すると、安定して動作するようです。
30
+
31
+ ``` swift
32
+ button.configuration?.titleTextAttributesTransformer = UIConfigurationTextAttributesTransformer { incoming in
33
+ var outgoing = incoming
34
+ outgoing.font = UIFont.systemFont(ofSize: 48)
35
+ return outgoing
36
+ }
23
37
  ```
24
38
 
25
- のように、 `UIButton.Configuration` のプロパティを変更します。ただ、これを設定するとフォントの設定がリセットされてしまうようで、上記の設定を実施した後、
26
-
27
-
28
-
29
- ``` swift
30
-
31
- button.titleLabel?.font = UIFont.systemFont(ofSize: 48)
32
-
33
- button.subtitleLabel?.font = UIFont.systemFont(ofSize: 48)
34
-
35
- ```
36
-
37
- のようにすれば、それぞれのタイトルのフォントも設定できました。