回答編集履歴
1
回答追記
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
|
-
|
21
|
+
2022/12/25追記
|
22
|
+
---
|
23
|
+
上記の回答では、configurationの設定を実施した後にtitleLabelのfontを変更したらうまくいったこと説明しましたが、やはりそれは新しい設定方法と古い設定方法を混在させた方法になるので安定しないようです。タイトルを再設定したりすると、結局うまく動作できなくなることを確認しました。
|
20
24
|
|
21
|
-
|
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
|
-
のようにすれば、それぞれのタイトルのフォントも設定できました。
|