Dyanmic Typeでさらに大きなお文字を制限する方法

iosには設定でデバイス全体のフォントサイズを変更できる機能が搭載されています。しかし、さらに大きな文字をONにして文字サイズを最大値にすると文字が大きくなりすぎてレイアウトが著しく崩れてしまいます。

アクセシビリティに対応して文字の大きさはある程度変更したいけど一定以上の大きさにはしたくない時の解決法です。

解決法

結論からいうと、labelに対してadjustsFontSizeToFitWidth = trueを設定してやることで、制約のWidth以上大きさ以上になってしまった際それ以上大きくなることをストップしてくれます。

試してみる

2つのラベルに異なる制約を設定しました。上のラベルは横幅を大きく設定し、下のラベルはlabelという文字がちょうど入る程度の大きさに設定をしています。

Dynamic Typeに適応させる

Dynamic Typeを設定する際はAutomatically Adjusts Fontにチェックをつける必要があります。

そしてDynamicTypeを使う際はpixcelではなくFontのStyleをTextStyleにしてしまうと扱いやすいです。

文字サイズを変更してみる

設定 > 一般 > アクセシビリティ > さらに大きな文字から画像のように文字設定を変更してみます。

すると、狭い制約で設定を行なっていたLabelが表示できなくなってしまいまい、・・・と省略されて表示されてしまいました。

adjustsFontSizeToFitWidthを設定する

こんな時、adjustsFontSizeToFitWidthを設定することで、ラベルが表示できるようになります。

label.adjustsFontSizeToFitWidth = true

adjustsFontSizeToFitWidthを設定することで入りきらない場合は文字サイズの拡大を無視できるためレイアウト崩れが少なくなりDynamic Typeの対応がちょっとだけ楽になると思います。

Swift

前の記事

Particleを使ってみる