前回のつづき

今回はフォントについてです。

基本はシステムフォントを使う

フォントに関してはガイドラインに「システムフォントの文字間隔、行の高さは、どのサイズでも読みやすいように調整されている」と書かれており、システムフォントの利用を推奨しています。逆に言うとカスタムフォントは、そのような最適化があまりされていないと思ったほうが良いです。

システムフォントを使うと日本語はヒラギノ、英語はHelveticaで表示されます。また改行した場合の文字間隔なども的確な状態で表示されます。

システムフォントの利用

上記はシステムフォントを使い改行による高さをプログラムが計算した状態で表示しています。(Auto LayoutやUILabel#sizeThatFitsが返す高さです)その他の言語も適したフォントで適した文字間隔、行間で表示されるはずです。システムフォントはiOSのプリインストールアプリでも使われているもので、Appleがきちんと最適化したものになっているでしょうから。

それに対してヒラギノとHelveticaを直接使う方法(カスタムフォント)はいろいろと問題があることに注意してください。

font-02

上はHelvetica、下はヒラギノを直接指定した場合です。システムフォントを利用した時と比べて行間が狭くなっています。またヒラギノの方はg q yの下が欠けていることに注目してください。プログラムで計算した高さが適切で無いためこのようになっています。

※ 行間の狭さはプログラマの視点では気にならないかもしれませんが、デザイン的視点では問題です。デザイナーからは指摘が来るでしょう。

行間を調整する方法もあるのですが、ほとんどの場合そのコストを割くメリットはないでしょう。カスタムフォントは、どうしてもそこだけ見栄えにこだわりたい時などに限定して使うべきだと思います。

ダイナミックタイプ

iOS 7からフォントのサイズを設定画面から変更できるようになりました。このサイズ設定を反映するにはアプリ側で対応する必要があります。対応する方法は2点。

  1. UIFont#preferredFontForTextStyle:を使ってフォントを得る
  2. UIApplication#preferredContentSizeCategoryを使って設定サイズを得て、それを元にフォントサイズを決める

1の方法は引数に、といった用途に応じたスタイルを渡してフォントを得て、それをLabelなどに当てる方法です。もしくはInterface Builderのプロパティで指定します。指定したスタイルと設定サイズに合わせて適切なサイズのシステムフォントが選ばれます。基本はこの方法で良いはずです。

2の方法はカスタムフォントを使っている場合、システムフォントだがUIFont#preferredFontForTextStyleが返すサイズに従いたいくない時に使います。

ダイナミックタイプに関する詳しいプログラミングについて書くと長くなるので、別記事にしたいと思います。

つづく