View in English

  • メニューを開く メニューを閉じる
  • Apple Developer
検索
検索を終了
  • Apple Developer
  • ニュース
  • 見つける
  • デザイン
  • 開発
  • 配信
  • サポート
  • アカウント
次の内容に検索結果を絞り込む

クイックリンク

5 クイックリンク

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • トピック
  • すべてのビデオ
  • 利用方法

その他のビデオ

ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。

  • 概要
  • トランスクリプト
  • コード
  • UIタイポグラフィーの詳細

    読みやすさや、アクセシビリティ、Appleプラットフォーム全体における一貫性を強化する卓越したタイポグラフィーをAppのユーザーインターフェース内で実現する方法について学習します。視覚上のサイズやウェイト調整を容易にする可変フォントへの動きを含め、San Franciscoフォントファミリーの最新の進化の内容について把握しましょう。システムフォントを最大限利用する方法や、カスタムフォントでDynamic Typeをサポートする方法についてのコツも公開します。San Franciscoフォントファミリーの背景となる原則について、知識を改めたい方は、WWDC15の"Introducing the New System Fonts"をご参照ください。

    リソース

    • Building Apps with Dynamic Type
    • Human Interface Guidelines: Typography
      • HDビデオ
      • SDビデオ

    関連ビデオ

    WWDC22

    • 拡張されたSan Franciscoフォントファミリの紹介

    WWDC20

    • SF Symbols 2
    • SwiftUIの新機能

    WWDC19

    • SF Symbolsの紹介
  • このビデオを検索

    こんにちは WWDCへようこそ

    “UIタイポグラフィーの詳細” 私はロイック・サンダー デザインチームの書体デザイナーです 同僚のジャンと一緒に インターフェイスの タイポグラフィーの細部と アプリケーションに用いるための ツールを紹介します 本日のトピックスは プラットフォームでのテキストの ダイナミックな挙動の理解です まずはフォントと インターフェイスのデザインについて話します ジャンからは便利なAPIと タイポグラフィーのよい事例を紹介します 文字はフォントとサイズを 選ぶだけでいいと 大抵の人は考えるでしょう しかし実際のところ― テキストのサイズを変えると さまざまな結果が生まれます オプティカル・サイズについて学ぶことで 読みやすさをより理解できます

    次にバリアブルフォントについて 少し話します プラットフォームでの テキストの挙動を向上し アプリケーションの タイポグラフィーを改善します

    そして インターフェイスのデザインに影響する トラッキングとレディングの話を レイアウトには不可欠なので この機会に ぜひ知っておいてください ジャンがテキストスタイルと Dynamic Typeを説明します すばらしいデザインを かなえるツールです 新しくないAPIもありますが 最新の情報を お伝えします では始めましょう “オプティカル・サイズ” まず数年前のことから 説明していきます システムフォントの San Franciscoが開発された時です 我々の目標は すべてのサイズの見た目のよさでした 2つのバージョンを加えて 目標を達成しました サイズが20ポイント未満のSF Textと それより大きいSF Displayです これらがオプティカル・サイズです

    文字がさらに読みやすくなります 例えば SF TextとSF Displayの文字間隔は それぞれのサイズに合わせて変えられます

    それぞれの縦の比率も少し違います 同じサイズでも SF Textのほうが少し大きく見えます 小さいサイズでも読みやすいです

    このデザインの発表は ちょっとしたレボリューションでしたが “レボリューション”という言葉は面白い 前進を意味すると思いがちですが “初めに戻る”の意味もあります オプティカル・サイズは 活版印刷の時代から存在します 何世紀も変わらない道具も含めて― 印刷工程もそのままです デジタル技術は 柔軟性をもたらしましたが タイポグラフィーは 昔ほど洗練されていません そこで 本来の オプティカル・サイズをご覧ください 僕は活字と歴史好きで この18世紀の本を持っています いわゆる活字見本です さまざまなサイズが載っています 2つの例を お見せします デザインは同じで サイズが違います SF TextとSF Displayのようです 現代の印刷なら 8ポイントと42ポイントくらいです

    それぞれの文字サイズに合わせて 金属の活字を手作業で作りました

    スチールの型を使って 活字の文字が作られます スチールの型は 鋳造の過程で使われます 型に金属を流し入れ 金属の活字が出来上がります

    細部を見ていくと 手作業への 物理的なサイズの影響が分かります 8ポイントはサイズが小さいので でこぼこです オプティカル・サイズの点では 変形が難しいということです

    金属とインクで 紙に印刷するという挑戦への 鋳型職人の闘いとも言えます 我々にとってはピクセルグリッドに― ラスタライズされたベクター画像の挑戦です しかし出力の種類に関係なく オプティカル・サイズの変化は 読みやすさと細部のバランスです この2つは無関係でなく 読みやすさは細部で決まります SF TextとSF Displayと同様に 文字間隔が重要な細部です

    文字が小さくなると より間隔が必要です そうすれば 見分けやすくなります 文字の形にも 意味のある細部があります 文字の細い部分は サイズが小さくなると 目立つ必要があります

    例えば“i”の点の位置が 間違っていると思うかもしれません しかし これは意図的なもので 小文字の“l”と間違わないためです インクでもピクセルでも 隙間が狭いと 埋まりやすくなります

    相対的なサイズが関係しています 意図された縮尺比率を 見ていきましょう デザインの違いは それほど目立ちません それがオプティカル・サイズの目的です 読みやすさと見た目が釣り合い― デザインが縮尺と調和しています デザインを縮尺に合わせることは 数世紀前は直接の作業でした 実寸で作ったからです それに対して デジタルは不運な問題に直面しました

    ベクター画像の縮尺は ほぼ無限で デジタルフォントでは 各グリフの描画は1つだけです 書体デザイナーは 理想のサイズを選ぶ必要があります 使用するフォントには 効果を発揮するサイズがあります

    複数サイズに適応した マルチプルなフォントも作れます しかし お勧めしません 作業が大変で 何よりも― 使いにくいフォントファミリーになります 熟慮して San Franciscoを作り オプティカル・サイズを 2つだけ持つことにしました

    OSは2つのデザインを 自動で切り替えられるからです そしてSF TextとSF Displayを 公開することにしました この数年 プラットフォームで 最先端の機能でしたが もっと改善したいと思っていました TextとDisplayを切り替えなくても 1つのフォントが各サイズに 自動で適応すれば すばらしい これは数年後に可能になりました 2016年に発表したバリアブルフォントは OpenTypeの仕様を発展させたものです ウェブフォントの人気の高まりと 既存のフォントのフォーマットの 限界への挑戦から作られました フォーマットは グリフの収録方法を変えます グリフは1つの静的描画に限定されません 関連している別のグリフを作る 各ポイントの動きを記述します この動きは デザインの軸と結びつき ソフトウェアが挙動をコントロールします これらの軸の1つが オプティカル・サイズの実行に 関わっています SF Proをアップデートし 既存のオプティカル・サイズを改良できました この新しい挙動の可能性は セリフ体のNew Yorkで示されます サイズへのさまざまな適応が目立ちます

    オプティカル・サイズのおかげで 縮尺に完璧に合った書体を デザインできます 昔の活字の優れた点を 取り戻しています 今年は個別のフォントとしての オプティカル・サイズから変わります オプティカル・サイズだけでなく ウエイトも統合されます 大部分のシステムフォントは 1つのバリアブルフォントとして ダウンロードされます 移行緩和のため 今年も TextとDisplayのフォントを公開します デザインツールには バリアブルフォントの 新しいコントロールがあります 大抵はパブリックな軸のスライダです

    しかし これは任意で 事前登録されたフォントでは いつもどおり使えます システムフォントを使う場合は 事前登録のフォントのままがいいです

    オプティカル・サイズを サポートしている場合は 特定の範囲のサイズを対象とした 専用のスライダがあります 使用しているポイントサイズに応じて スライダの値は変わります

    アプリケーションによっては コントロールの値が自動で変わりません

    スライダの値が適していない時は 自分で設定する必要があります

    ポイントサイズが大きくても 問題ありません 一番近い値に設定してください 以前のOSでツールを使う場合は バリアブルフォントが 使えないかもしれません その場合は以前のように SF TextとSF Displayなど 個別のオプティカル・サイズを使ってください

    コードでは この挙動は自動です オプティカル・サイズとポイントサイズを 同期させています システムフォントに適応します オプティカル・サイズの軸があれば カスタムバリアブルフォントにも適応します サイズごとのタイポグラフィーの 最新情報は ここまでです インターフェイスの テキストレイアウトをお話しします トラッキングとレディングです

    トラッキングは サイズごとのタイポグラフィーに不可欠です オプティカル・サイズの説明をしましたが 話してないことがあります トラッキングと組み合わせると オプティカル・サイズは効果が出ます まずはトラッキングの説明をします 最初に フォントのグリフを見ましょう ある程度のスペースを組み込んでいます このスペースはサイドベアリングです グリフの描画でデザインされ デフォルトの間隔を決めます

    しかしテキストは どのサイズでもよく見える― 文字の間隔を必要とします

    文字間隔を取り それを調整するのを トラッキングと呼びます CSSでのように 文字間隔と同義ですが レイアウトでグリフの間に スペースを入れることを特に指します 困惑している人もいるでしょう “カーニングだと思っていた”と

    混同しがちですが トラッキングとカーニングは違います

    カーニングは 文字と文字の間の調整だけです 書体デザイナーが調整するもので 開発者が修正する必要は ほぼありません トラッキングに戻って― San Franciscoでの 使い方を説明します

    SF TextやSF Displayのように サイズごとにスペースを調整する時でも トラッキングなら うまく調整できます

    トラッキングを使わず 20ポイントでフォントを切り替えると SF TextとSF Displayの スペースの違いが問題になります

    青の最後の行と オレンジの最初の行は ほとんど同じ長さです しかしポイントサイズは違います

    デフォルトのスペースが違い― 急激な変化のために トラッキングとオプティカル・サイズを使います システムフォントの挙動には 不可欠な部分です そこで トラッキングテーブルを Apple Design Resourcesで公開しています システムフォントの挙動を 正確に再現したいなら トラッキングの適用の度合を 知る必要があります 今年はSF Proが バリアブルフォントになり 20ポイントに大きな変化はありません 17~28ポイントの間で デザインがTextからDisplayへ移行します 挙動に基本的な変化があり トラッキングテーブルを アップデートしました 新しいSF Proを使う時には 17~28ポイントのトラッキングの値の 新しいセットを適用してください トラッキングのグラフを見て もう1点お伝えします フォントには複数の トラッキングテーブルが入ります それでトラッキングの値を加え 文字列の調整も可能になります 文章が途切れているとします

    よくある解決策は カーニングのAPIでしょうか しかしカーニングは 理想的でありません

    トラッキングのAPIのほうがいい 意味的に正しいです それにトラッキングと 相性が悪い合字などの タイポグラフィーの特徴の 使用を停止できます

    合字のある単語を カーニングAPIでトラッキングすると 合字は残り 単語のリズムが崩れます しかしトラッキングAPIは 合字を切り離せます 文字の間隔も均一です

    しかし望ましい最良の解決策は 自動的に間隔が狭くなることです タイトなトラッキングテーブルを使います このAPIでは 読みやすい範囲内で システムが文字列を調整します トラッキングしすぎる場合があるからです そういう場合は 途切れたままでいいでしょう

    このAPIはサイズごとの トラッキングを適用します 自分でトラッキングするなら 手動で実行します “ドキュメントのフォントのトラッキング” それでは最後に少し告知を 他社製のフォントも トラッキング可能にしました “trackとSTATのテーブルを含む すべてのフォント” フォント販売者は自分のフォントに テーブルを追加できます フォントにSTATのテーブルが含まれれば 埋め込みのトラッキングが プラットフォームで可能です

    kCTFontOpticalSizeAttributeの適用で 古いOSでトラッキングデータと使えます

    グリフの間のスペースは見ましたが 次はラインの間の スペースについて考えましょう

    再び 言葉の意味から 用語を明確にしていきます 最初はラインハイトです

    ラインハイトは フォントの縦方向の幅です ベースラインの間を測っても構いません どの測り方でも 長さは同じです

    ラインの間の距離が増加し その間のスペースがレディングです

    余談ですが 名前は 金属の活字時代に由来します 活字の間に鉛の板が 入っていたことからです

    ラインの間にレディングがある場合は ラインハイトにレディングが含まれます 一方の値が変われば もう一方の値も変わります

    レディングとラインハイトに困ることは ほとんどありません 大部分のインターフェイスの要素で 設定済みです しかし修正の例を 2つ お見せしましょう

    アラビア語による記述です 上下に伸びる部分が多いです 周りの線を越えていくかもしれません その場合 レディングを加えるのがいいでしょう

    アラビア語など 高いラインハイトの言語では プラットフォームに レディングを増やしています

    狭いレディングが役立つこともあり コンパクトな表示になります watchOSでは 狭いレディングを多用し 最大限の情報を表示しています

    テキストスタイルを使用した調整です 後ほど ジャンが説明します

    この2つは我々の取り組みを示す よい実例となったと思います 既存のシステムAPIで 毎年のデザインの改良を利用できます 新しいAPIは 導入しやすいものを目指しています アプリケーションを向上してくれます ジャンに引き継ぐ いいタイミングです パワフルなフォントとテキストのAPIを 紹介してくれます ありがとう ロイック タイポグラフィーの詳細に関する話の後は テキストスタイルとDynamic Typeの話です これらのシステムツールは 一貫した タイポグラフィーを作成するのに役立ちます

    テキストスタイルは Appleのインターフェイス構築の基本です 柔軟で一貫したタイポグラフィーを 実現する枠組みとして― 明確な階層と幅広いスタイルを備え 大半のインターフェイスに対応できます

    テキストスタイルは― システムフォントのウエイト ポイントサイズ レディングを組み合わせて定義したものです このシステム機能は タイポグラフィーの階層を提供し― 読みやすいレイアウトを 実現する助けになります

    テキストスタイルには情報の階層を表せるよう 幅広いフォントサイズがありますが― 細かな違いを表すのに サイズだけでは不十分なことがあります

    例えば これは“カレンダー”の年と月です 標準のテキストスタイルより 文字が太いですね 強調版のテキストスタイルを使うと 同じサイズでウエイトを変えられます システムアプリケーションでは よく見かけます 例えば “メール”の タイトルバーで使っているのは― 強調版のタイトル用テキストスタイルです アプリケーションでの 使用方法を紹介しましょう

    title1フォントのラベルがあるとします このタイトルを強調するため ウエイトを“bold”にします 強調版のtitle1は次のようになります

    UIFont preferredFont(withTextStyle:) APIの代わりに― UIFontDescriptor APIで title1スタイルの記述子を取得します boldシンボリックトレイトを適用すると 強調版のtitle1スタイルになります これはSF Pro Boldに対応します

    boldをNSFontやUIFontやSwiftUIフォントに使い 強調版のフォントを作成できます このシンボリックトレイト名は“bold”ですが 実際のウエイトは テキストスタイルによって違います “medium”“semibold”“bold” また“heavy”もあります テキストスタイルにはラインハイトがあり 大抵は適切な幅になっています しかしスペースが限られる場合は― 行間を狭めることで 情報の密度を高められます フィットネスアプリがいい例です あるいは多くのテキストを表示する時― 読みやすさのために もう少し空間が欲しいことがあるでしょう “マップ”などがそうです これにはテキストスタイルのレディングで 幅を調整します iOSとmacOSでは狭いレディングを使うと ラインハイトが2ポイント減り― 広いレディングを使うと 2ポイント増えます watchOSでは増減幅は1ポイントです

    長い段落を考えてみましょう 使っているのはbodyテキストスタイルです 今 ラインハイトは22ポイントですが― この幅を狭くすると どう見えるか試してみます 分かりますね TightLeadingシンボリックトレイトを 適用すると― ラインハイトは20ポイントになります これは長い段落には 狭すぎるように見えるので― 今度は広いレディングを使います LooseLeadingトレイトで 24ポイントにしました 見やすいですね 強調する時に行ったことと 同様の処理です 今度はTightLeadingとLooseLeadingの― シンボリックトレイトを使いました 今年から テキストスタイルのレディング調整は SwiftUIでも可能です

    Appleはシステムとアプリケーションに New YorkとSF Pro Roundedを使っています “ブック”と“リマインダー”の例です これらは単独のタイプフェースとして 使われるほか― テキストスタイルとも連動します

    リマインダーのようなラベルを 作りたいとします 強調版テキストスタイルを使ってみましょう テキスト“Today”に タイトル用の強調版テキストスタイルを使います 今 これはSF Pro Boldです

    FontDescriptor withDesign APIで 丸いデザインにしましょう フォントはSF Pro Roundedに変わります

    柔軟なAPIを使って こうしたデザインを― どのシステムUIフォントにも適用できます AppKitとUIKitでは FontDescriptor withDesign APIをどのUIフォントにも使えます

    SwiftUIの場合 APIは少し違います フォント作成時に最初にデザインを渡し― 修飾子を使った既存フォントの変換は行いません テキストスタイルを デザインと指定する時― デザイン以外の要素は変わりません フォントサイズ ウエイト ラインハイトは同じです ウェブページやアプリケーションの ウェブ表示を扱う方も多いでしょう Webkitへの“-apple-system” フォントファミリーの導入以来― CSSではSan Franciscoを使用できます これは広く普及しました

    今は“-apple”のない “system-ui”が標準名です 今年初めには新しい CSSフォントファミリー名として― “ui-rounded”“ui-serif” “ui-monospace”なども加わりました 今年からテキストスタイルのAPIは macOSでフルサポートされています AppKitでCocoaアプリケーション向けに 導入された新しいAPIは― iOSと同様に あらゆる テキストスタイルに対応します フォントサイズはmacOSテキストに 沿って調整され― Dynamic Type未対応ながら テキストスタイルの他の利点を活用できます 去年紹介したCatalystアプリケーションの テキストスタイルサイズは― iOS向けに77%縮小したサイズです 今年 Catalystアプリケーションの インターフェイスがMac用に最適化され 新しいテキストスタイルサイズが定められました

    77%版に近いサイズなので― アプリケーションの変更は 最小限で済みます

    “Scale Interface to Match iPad”を選ぶと 77%のiOSサイズを引き続き使用できます 新しい動作をご希望なら― “Optimize Interface for Mac”を選びます

    iOSにはテキストスタイルの新機能 Dynamic Typeが加わりました 設定に沿って フォントを 自動的に拡大縮小する機能です

    Dynamic Typeを使うと テキストスタイルのサイズを調整できます テキストが読みやすくなるので アプリケーションでの Dynamic Type対応をご検討ください

    システムフォントAPIと テキストスタイルを併用すると― iOSでこの動作が自動的に実現します Dynamic Typeはカスタムフォントにも使えます その方法を紹介しましょう

    この表は多くのことを示しています まず拡大縮小の動作は― テキストスタイルによって違います bodyとtitle1とfootnoteを Dynamic Typeで拡大縮小すると こうなります Dynamic Typeをカスタムフォントに使う場合も ここに注意が必要です タイポグラフィーは ブランドの個性を表す重要なものです 多くのアプリケーションは 専用にデザインした カスタムフォントを使うと思いますが― アクセシビリティのため Dynamic Typeへの対応も必要です

    iOSシステムアプリケーションと同様に テキストサイズの設定変更に アプリケーションを対応させるには?

    これは たびたび出る話題なので 以前のセッションの内容を再び紹介します iOS 11から UIFontMetricsクラスが導入されています このクラスでテキストスタイルの Dynamic Type機能を取得し― 任意のフォントに適用できます

    使用例を見てみましょう まず標準のUIFont APIで 通常どおりカスタムフォントを指定します 次にbodyテキストスタイルから UIFontMetricsを作成できます bodyMetricsオブジェクトにより scaledFont APIの生成フォントは― テキストサイズの設定変更時 bodyと同様に拡大縮小します

    この方法はカスタムレイアウトの定数値を 拡大縮小するのにも使えます 例えば これはラベル間のスペースの指定です SwiftUIのデベロッパからは リリース以来 多くの反応があり― 今年 SwiftUIでもUIKitと同様の フォントの拡大縮小が可能になりました 例えば このSwiftUIの ContentViewのテキストは― テキストサイズの設定変更に合わせて このように拡大縮小されます

    このテキストを“Avenir-Medium”の 34ポイントにしてみましょう 指定したとおりにフォントが適用されました しかしiOS 13では カスタムフォントを使うと― Dynamic Typeに 対応できなくなる問題がありました

    iOS 14では この問題は解決しています タイトルとして適切に 拡大縮小されるか確かめるため― relativeToで titleスタイルと 相対的に拡大縮小させてみます

    タイトルテキストが 自動的に拡大縮小されています

    次は本文テキストを追加します タイトルテキストを追加する時と同様に テキスト段落を宣言し― VStackでTextに割り当てます

    relativeToパラメータは不要です iOS 14ではカスタムフォントは― デフォルトでbodyスタイルと 相対的に拡大縮小されます

    タイトルも本文も 自動的に拡大縮小されていますね 本文テキストの周囲に パディングが欲しいところです 画面の端とタイトルに近づきすぎています

    パディングを追加しましょう 20ポイントの固定サイズを指定してみます

    よくなりました パディングもテキストサイズに合わせて 拡大縮小させたいと思います 新しいScaledMetricプロパティラッパーで パディングを値“20”で定義しますが―

    bodyスタイルと相対的な拡大縮小も可能です

    動作を見てみましょう テキスト周囲のパディングも 固定でなく相対的に拡大縮小しています

    今 お話ししたことをまとめましょう font custom APIの新しい任意のパラメータ relativeToで― 拡大縮小の基準とするテキストスタイルを 指定します 指定しなければ bodyが基準になります これはiOS 14での動作変更です 拡大縮小しない固定サイズのカスタムフォントは fixedSizeパラメータで作成できます

    UIFontMetricsの時と同じように 定数も拡大縮小するには― ScaledMetricプロパティラッパーを使います いろいろ お話ししましたが 最後に基本原則をお伝えしておきます Appleのシステムフォントは高品質で 幅広いスタイルがあります “SF Pro”“SF Pro Rounded” “SF Mono”“New York”などを― ぜひ使ってみてください

    タイポグラフィーに重要な階層の構築には テキストスタイルを活用できます

    カスタムフォントを使う場合も 多くの方法でDynamic Typeに対応でき― アクセシビリティに有効です

    今日はタイポグラフィーの重要な 要素の話もしました デフォルトのシステム動作から変更するのは 例外的な場合のみとしましょう

    インターフェイスで カスタムのトラッキングを使う場合 サイズを限定します 小さいサイズのトラッキングは 大きいサイズに合わないことがあります Appleプラットフォームでの テキストの動作を理解し― テキストとフォントのAPIをアプリケーションの タイポグラフィー向上にご活用ください

    • 12:19 - Setting custom tracking

      // UIKit
      label.attributedText =
          NSAttributedString(string: "hamburgefonstiv",
              attributes: [kCTTrackingAttributeName as NSAttributedString.Key: -0.5])
      
      // SwiftUI
      Text("hamburgefonstiv").tracking(-0.5)
    • 12:45 - Allow tightening to use tight tracking from system fonts

      // UIKit: UILabel
      label.allowsDefaultTighteningForTruncation = true
      
      // AppKit: NSTextField
      textField.allowsDefaultTighteningForTruncation = true
      
      // SwiftUI
      Text("hamburgefonstiv").allowsTightening(true)
    • 17:45 - Getting emphasized text styles

      // Getting emphasized text styles
      
      let label = UILabel()
      label.text = "Ready. Set. Code."
      
      if let descriptor = UIFontDescriptor
          .preferredFontDescriptor(withTextStyle: .title1)
          .withSymbolicTraits(.traitBold) {
          // 28 pt Bold on iOS
          label.font = .init(descriptor: descriptor, size: 0)
      }
    • 18:05 - Getting emphasized text styles APIs

      // Getting emphasized text styles
      
      // AppKit
      let descriptor = NSFontDescriptor
          .preferredFontDescriptor(forTextStyle: .body)
          .withSymbolicTraits(.bold)
      // 13 pt Semibold on macOS
      let emphasizedBodyFont = NSFont(descriptor: descriptor, size: 0)
      
      // UIKit/Catalyst
      if let descriptor = UIFontDescriptor
          .preferredFontDescriptor(withTextStyle: .body)
          .withSymbolicTraits(.traitBold) {
          // 17 pt Semibold on iOS
          let emphasizedBodyFont = UIFont(descriptor: descriptor, size: 0)
      }
      
      // SwiftUI
      let emphasizedFootnoteFont = Font.footnote.bold() // 13 pt Semibold on iOS
    • 19:34 - Getting tight leading variant

      // Getting tight leading variant
      import UIKit
      
      let label = UILabel()
      label.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
      
      if let descriptor = UIFontDescriptor
          .preferredFontDescriptor(withTextStyle: .body)
          .withSymbolicTraits(.traitTightLeading)
          // 20 pt line height
          label.font = UIFont(descriptor: descriptor, size: 0)
      }
    • 19:49 - Getting loose leading variant

      // Getting tight leading variant
      import UIKit
      
      let label = UILabel()
      label.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
      
      if let descriptor = UIFontDescriptor
          .preferredFontDescriptor(withTextStyle: .body)
          .withSymbolicTraits(.traitLooseLeading)
          // 24 pt line height
          label.font = UIFont(descriptor: descriptor, size: 0)
      }
    • 20:03 - Getting tight/loose leading variant APIs

      // Getting tight/loose leading variant
      
      // AppKit
      let descriptor = NSFontDescriptor.preferredFontDescriptor(forTextStyle: .headline)
          .withSymbolicTraits(.tightLeading) // Use .looseLeading for loose leading font
      let tightLeadingFont = NSFont(descriptor: descriptor, size: 0) // 14 pt line height
      
      // UIKit/Catalyst
      if let descriptor = UIFontDescriptor.preferredFontDescriptor(withTextStyle: .title1)
          .withSymbolicTraits(.traitTightLeading) { // Use .traitLooseLeading for loose leading
          let tightLeadingFont = UIFont(descriptor: descriptor, size: 0) // 36 pt line height
      }
      
      // SwiftUI
      // Use .loose for loose leading font
      let tightLeadingFootnoteFont = Font.footnote.leading(.tight) // 16 pt line height on iOS
    • 20:56 - Access rounded system font design

      // Access rounded system font design
      import UIKit
      
      let label = UILabel()
      label.text = "Today"
      
      if let descriptor = UIFontDescriptor
          .preferredFontDescriptor(withTextStyle: .largeTitle)
          .withSymbolicTraits(.traitBold)?
          .withDesign(.rounded) {
          // SF Pro Rounded Bold
          label.font = UIFont(descriptor: descriptor, size: 0)
      }
    • 21:08 - Access system font designs

      // Access system font designs
      
      // Use .serif for New York, .monospaced for SF Mono
      
      // AppKit
      let descriptor = NSFontDescriptor.preferredFontDescriptor(forTextStyle: .body)
          .withDesign(.rounded)
      let roundedBodyFont = NSFont(descriptor: descriptor, size: 0) // SF Pro Rounded
      
      // UIKit/Catalyst
      if let descriptor = UIFontDescriptor.preferredFontDescriptor(withTextStyle: .body)
          .withDesign(.rounded) {
          let roundedBodyFont = UIFont(descriptor: descriptor, size: 0) // SF Pro Rounded
      }
      
      // SwiftUI
      let roundedBodyFont = Font.system(.body, design: .rounded) // SF Pro Rounded
    • 25:05 - Support Dynamic Type with custom font in UIKit

      // Support Dynamic Type with custom font in UIKit
      
      if let customFont = UIFont(name: "Charter-Roman", size: 17) {
          let bodyMetrics = UIFontMetrics(forTextStyle: .body)
          
          // Charter-Roman scaled relative to body text style
          // in different content size categories.
          let customFontScaledLikeBody = bodyMetrics.scaledFont(for: customFont)
          label.font = customFontScaledLikeBody
          label.adjustsFontForContentSizeCategory = true
      
          // Scaling constant 10 relative to body text style.
          let scaledValue = bodyMetrics.scaledValue(for: 10)
      }
    • 26:25 - Support Dynamic Type with custom fonts in SwiftUI example

      struct ContentView: View {
          let prose = "Apple provides two type families you can use in your iOS apps. San Francisco (SF). San Francisco is a sans serif type family that includes SF Pro, SF Pro Rounded, SF Mono, SF Compact, and SF Compact Rounded."
          @ScaledMetric(relativeTo: .body) var padding: CGFloat = 20
      
          var body: some View {
              VStack {
                  Text("Typography")
                      .font(.custom("Avenir-Medium", size: 34, relativeTo: .title))
                  Text(prose)
                      .font(.custom("Charter-Roman", size: 17))
                      .padding(padding)
              }
          }
      }
    • 28:29 - Support Dynamic Type with custom fonts in SwiftUI

      // Support Dynamic Type with custom fonts in SwiftUI
      
      // Text with font Avenir-Roman, scaling relative to title text style.
      Text("Typography").font(.custom("Avenir-Roman", size: 34, relativeTo: .title))
      
      // Text with font Helvetica, scaling relative to body text style.
      Text("Title").font(.custom("Helvetica", size: 17))
      
      // Text with font Courier, always use fixed size, do not scale according to user setting.
      Text("Fixed").font(.custom("Courier", fixedSize: 17))
      
      // Constant 10, scaled relative to title text style.
      @ScaledMetric(relativeTo: .title) private var spacing: CGFloat = 10.0

Developer Footer

  • ビデオ
  • WWDC20
  • UIタイポグラフィーの詳細
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード(英語)
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    Apple Developerアプリを入手する
    Copyright © 2025 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン