前提・実現したいこと
Swift storyboardでUIButtonを作成し、ボタンに表示する文をコードで指定したい。
発生している問題・エラーメッセージ
Swift
1UIButton.setTitle("文章", for: .normal) 2```で文章を設定すると、文章は変更されますが、フォントサイズなどのスタイルが初期化されてしまいます。 3 4### 試したこと 5```Swift 6UIButton.titleLabel?.font
などを試しましたが、特に変化ありません。どうすればスタイル変更できるのでしょうか。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

回答2件
2
ベストアンサー
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/15 07:51
編集2022/12/25 02:34総合スコア6292
1
こんな感じで指定できそうです。
swift
1UIButton.titleLabel?.font = UIFont(name: "Academy Engraved LET",size: 13.0)
投稿2021/12/15 04:12
総合スコア101
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
回答へのコメント

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
同じタグがついた質問を見る
HTMLで用いる<button>タグです。
Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。
Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています
近年は、コンピュータ上、紙面上で利用できる書体データのことをfontといいます。数える時の単位は「書体」で、データとしてのフォントは、デジタルフォントと呼ばれる場合があります。 HTML/CSSでは要素を指定し、フォント情報を調整することができます。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2021/12/17 00:35