Dynamic Typeに対応してユーザー設定に合わせたフォントを使用する

UIKit徹底解説 iOSユーザーインターフェイスの開発iPhone/iPadアプリのUI開発テクニックを完全網羅!この記事は、書籍『UIKit徹底解説 iOSユーザーインターフェイスの開発』の内容を、Think IT向けに特別公開しているものです。iOS 7からは、テキストコンテンツを表示する際に

西方 夏子(にしかた・なつこ)

2014年9月16日 20:00

UIKit徹底解説 iOSユーザーインターフェイスの開発
iPhone/iPadアプリのUI開発テクニックを完全網羅!Amazon詳細ページへ

この記事は、書籍『UIKit徹底解説 iOSユーザーインターフェイスの開発』の内容を、Think IT向けに特別公開しているものです。

iOS 7からは、テキストコンテンツを表示する際に、ユーザーが好みの文字サイズを設定できます。これは「Dynamic Type」と呼ばれる機能です。アプリのDynamic Type対応は、ユーザー設定に合わせたフォントを作成し使用することを意味します。今回は、Dynamic Typeへの対応方法を解説します。

テキストスタイル属性を利用したフォントの生成

Dynamic Typeを使う場合、フォント名やサイズの代わりに「テキストスタイル」属性(UIFontDescriptorTextStyleAttribute)を使用してフォントを生成します。テキストスタイルには、以下の6通りが定義されています。これらのテキストスタイルは、表示すべきコンテンツに合わせてアプリ側が指定します。

  • UIFontTextStyleHeadline
  • UIFontTextStyleSubheadline
  • UIFontTextStyleBody
  • UIFontTextStyleCaption1
  • UIFontTextStyleCaption2
  • UIFontTextStyleFootnote

「設定」の[一般]→[文字サイズを変更]では、通常7段階の文字サイズが選択可能です。さらに、[一般]→[アクセシビリティ]で[より大きな文字]をオンにすると追加で5段階、合計12段階の設定が可能となります。
UIFontまたはUIFontDescriptorは、指定されたテキストスタイルと文字サイズ設定の組み合わせから適切なフォントを生成します。開発者は、生成されるフォントがどのようなフォントであるかを意識する必要はありません。

テキストスタイルは、Interface Builder(以降、IB)からでも、コードからでも設定できます。IBを利用する場合は、下記の通り、Attributes Inspectorの[Font]欄で設定したいテキストスタイルを選択します(図5)。

図5: IBでテキストスタイルを指定

コードで設定する場合、UIFontまたはUIFontDescriptorの生成時にテキストスタイルを指定します。UIFontの生成には、preferredFontForTextStyle:クラスメソッドを利用します(ソースコード17)。

[ソースコード17] テキストスタイルを指定してフォントを生成

UIFont *headlineFont = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];

同じく、UIFontDescriptorの生成には、preferredFontDescriptorWithTextStyle:クラスメソッドを利用します。直接フォントを生成する代わりにディスクリプタを生成するメリットは、あとから属性を追加できる点です。例えば、テキストスタイルを適用して、イタリック体のフォントを生成するには、2段階に分けてディスクリプタを設定します(ソースコード18)。

[ソースコード18] テキストスタイル指定のディスクリプタからフォントを生成

// Bodyスタイルのディスクリプタを生成
UIFontDescriptor *bodyFontDescriptor = 
[UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleBody];
// イタリック体の属性を追加
bodyFontDescriptor = 
[bodyFontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
// ディスクリプタからフォントを生成
UIFont *bodyFont = [UIFont fontWithDescriptor:bodyFontDescriptor size:0.0];

上記の通り、ディスクリプタを用いることで、ユーザー設定を活かしながらも独自のテキスト表現が可能となります。

この記事のキーワード :

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30