質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

768閲覧

[Swift] UILabelのSystemフォントを指定されている箇所のみ一括変更したい

KenjiYamamoto

総合スコア10

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2022/12/15 08:38

前提

開発言語:Swift5

StoryboardにてSystemフォントを指定している箇所のみ
フォント名をプログラムにて一括で変えたいのですが変更方法がわからず困っています。

例えば
System以外のフォントファミリーを指定している場合はそのまま据え置きをしたく
Systemフォントを指定している箇所のみヒラギノに変更したい

UILabel.apperance()で設定すると全て変更される為、こちらだと意味がない。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/12/15 08:46

chatGPTに聞いたところ、次の回答を得ました。 UILabel.appearance() を使用した場合、すべての UILabel のフォントが変更されます。このような場合は、特定の UILabel のインスタンスに対して直接フォントを変更することができます。例えば、Storyboard で System フォントを指定している UILabel の Outlet を作成し、それを使用してプログラムからフォントを変更することができます。 例: Copy code @IBOutlet weak var myLabel: UILabel! myLabel.font = UIFont(name: "Hiragino Sans", size: myLabel.font.pointSize) 上記の例では、myLabel という Outlet を使用して、System フォントから Hiragino Sans にフォントを変更しています。また、同じサイズのフォントを使用しているため、変更前と変更後で表示サイズが変わりません。 ただし、この方法では、Storyboard 上で System フォント以外のフォントを指定している UILabel に対しては、変更が適用されません。この場合は、プログラムからその UILabel のインスタンスを取得し、直接フォントを変更する必要があります。また、全ての UILabel のインスタンスに対して、フォントを変更する必要がある場合は、UILabel.appearance() を使用することもできます。
KenjiYamamoto

2022/12/15 14:19

Outleですと個別でやらないといけないですよね。 プロジェクト上のStoryboardのSystemフォントを使用しているところを一括で変えたいが Storyboard上で別のフォントを指定しているところは変えたくないのです。 ちなみにStoryboard以外のインスタンスは変更は独自な為、必要ありません。 そこで全てのStoryboardのシステムフォントを使用しているのをHiraginoに一括変更したいってのが やりたいことですね。 最悪はStoryboardのXMLファイルのSysytemフォントを使用している箇所を一括で 上書きするスクリプト方法などでもOKですが プログラムで一括変更をAppDelegateなどで行えた方がありがたいです。
Zuishin

2022/12/15 20:03

質問に書いてないことは伝わってないみたいですね。お父さんやお母さんに聞くように聞くのではなく、他人に伝わるよう書くのが良いと思います。 誤解された部分を参考に質問を編集してみましょう。
B4kedBr3ad

2022/12/16 01:15

ChatGPT使って回答するのはいかがなのでしょうか?
Zuishin

2022/12/16 02:22

運営からのお知らせを見てください。
KenjiYamamoto

2022/12/16 06:33 編集

Zuishin様 ご回答ありがとうございます、またご指摘ありがとうございます。 言い訳かもしれませんが質問の最初に "StoryboardにてSystemフォントを指定している箇所のみフォント名をプログラムにて一括で変えたい" と書かれているのが全てだと思います。 Zuishin様のご回答ですとOutletで変えたらいいよとのことですがそれだと個別に対応すると思いますので 質問の意図が伝わらなかった文章で申し上げにくいですが"一括"の意味の捉え違いかと思われます。 質問する立場でとても恐縮ですが今一度、良案をお待ちしております。
Zuishin

2022/12/16 06:46 編集

「StoryboardにてSystemフォントを指定している箇所のみフォント名をプログラムにて一括で変えたい」について ChatGPT で次のような回答が得られました。 StoryboardにてSystemフォントを指定している箇所のフォント名を一括で変えるには、次のようにします。 Storyboardを開き、Systemフォントを指定している箇所を選択します。 「Inspector」パネルで、「Font」セクションを開きます。 「System」を選択した状態で、「Custom」を選択します。 「Font」のドロップダウンリストから、新しいフォント名を選択します。 これにより、Storyboard上でSystemフォントを指定している箇所のフォント名が、新しいフォント名に一括で変更されます。 注意:この方法は、Storyboard上でSystemフォントを指定している箇所のみに適用されます。プログラムで指定しているフォント名は、この方法では変更されません。 もし、プログラムで指定しているフォント名も一括で変更したい場合は、その部分のコードも書き換える必要があります。例えば、次のようにすることで、プログラムで指定しているフォント名を新しいフォント名に変更することができます。 Copy code let label = UILabel() label.font = UIFont(name: "新しいフォント名", size: 17) ただし、この方法では、プログラムで指定しているフォント名を変更する場合に限ります。Storyboard上で指定しているフォント名を変更する場合は、Storyboardを書き換える必要があります。
guest

回答1

0

こちらの内容でいかがでしょうか?

changeAllSystemFontUILabel() メソッドを実行することで
システムフォントを一括で変換します。

viewDidLoad() メソッドで実行することを推奨します。

Swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 8 changeAllSystemFontUILabel() 9 } 10 11 func changeAllSystemFontUILabel() { 12 let views = getChild(view) 13 for i in views { 14 if let label = i as? UILabel { 15 if label.font.fontName == UIFont.systemFont(ofSize: label.font.pointSize).fontName { 16 //label.font = UIFont(name: "HiraginoSans-W7", size: pow(UIScreen.main.bounds.width * label.font.pointSize / 30, 0.5)) // ipadならば文字サイズを大きくする場合。(レスポンシブ対応する場合) 17 label.font = UIFont(name: "HiraginoSans-W7", size: label.font.pointSize) 18 print(label.font.fontName) 19 } 20 } 21 } 22 } 23 24 func getChild(_ view: UIView) -> [UIView] { 25 var result: [UIView] = [] 26 27 result += (view.subviews) 28 for i in view.subviews { 29 result += getChild(i) 30 } 31 32 return result 33 } 34}

投稿2022/12/19 01:11

編集2022/12/20 00:59
uni2

総合スコア256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問