apple-ios-27-design / references/text-styles-and-dynamic-type.md

Text Styles and Dynamic Type — iOS 27

Read when: you need an exact iOS 27 value for text Styles and Dynamic Type (size, colour, text, effect) as Apple's kit draws it. Owns: Text Styles and Dynamic Type in Apple's iOS 27 kit: components, anatomy, sizes, colours and states, text, kit notes.

Source: specs/text-styles-and-dynamic-type.txt from Apple's iOS 27 UI Kit (Sketch, v27.1.3), read 2026-11-01. Values are copied from the kit; derived values say so.

The shared text style table (every style with its regular, loose and tight leading) is in text-styles.md. This page adds the Dynamic Type size tables and the specimen boards that show each style in the four label colours.

Components

The page has no components (0 COMPONENT lines) and no BOARD lines. It holds four top-level documentation groups and one header instance:

Group Size Background Content
Dynamic Type Table 1380 × 1160 #FFFFFF, frame #999999 {Disabled - Light} 11 text styles × 7 standard sizes
Dynamic Type Table - Accessibility Sizes 1320 × 1160 #FFFFFF, frame #999999 {Disabled - Light} 11 text styles × 5 accessibility sizes
Text Styles - Dark 910 × 1540 #000000 34 style specimens × 4 label colours (Dark)
Text Styles - Light 910 × 1540 #FFFFFF 34 style specimens × 4 label colours (Light)
use "_Header" 1600 × 194 — page title and description

Size axis values: xSmall, Small, Medium, Large (Default), xLarge, xxLarge, xxxLarge (standard); AX1, AX2, AX3, AX4, AX5 (accessibility).

Text style axis values (layer names in the tables): Large Title, Title 1, Title 2, Title 3, Headline, Body, Callout, Subhead, Footnote, Caption 1, Caption 2.

Anatomy

Dynamic Type tables

Part (layer) Size Position Notes
Labels + BG / Frame 1380 × 1160 (standard), 1320 × 1160 (AX) @0,0 fill #999999 {Disabled - Light}
Title 1213 × 28 (standard), 1153 × 28 (AX) @20,8 "Dynamic Type Table" / "Dynamic Type Table (Accessibility Sizes)"
Subtitle (Fonts sizes are in p / Subtitle) 1340 × 40 / 1280 × 40 @20,41 the legend key (see Kit notes)
Size label (xSmall … AX5) 21–80 × 13 y 116 one per column
Legend column (R31, 38L R25, 31L R1 …) 51–55 × 990 (standard), 100 × 990 (AX) y 165–166 weight + size + leading per row, white text
Specimen column (group "xSmall" … group "AX5") 141–265 wide × 933–966 tall x 19–1099, y 133–159 11 text layers, one per style, black #000000

Column x positions (size label and legend): standard 20, 190, 360, 530, 710, 900, 1100; AX 20, 250, 500, 760, 1040.

Row y positions inside a specimen column (Large (Default) column): Large Title 0, Title 1 97, Title 2 192, Title 3 283, Headline 378, Body 468, Callout 559, Subhead 650, Footnote 741, Caption 1 833, Caption 2 925. Derived: row-to-row steps are 90–97 (differences of those y values); the legend text uses lh90, one legend line per row.

Text Styles boards (Dark and Light)

Part Value
Board 910 × 1540
Column header group Labels 825 × 16 @20,30; four texts at x 0, 239, 470, 690: "Label Color", "Secondary Label Color", "Tertiary Label Color", "Quaternary Label Color"
Specimen columns x 20 (Primary), 259 (Secondary), 490 (Tertiary), 710 (Quaternary)
Specimens per column 34 (one per local text style except 06 Body/Default)

Specimen rows (y, same in every column of both boards; the x 20 Large Title Bold sits at y 121, the other columns at y 120):

Style Variants shown (y)
LargeTitle 1 Default (69), 2 Bold (120)
Title1 1 Default (202), 2 Bold (249)
Title2 1 Default (330), 2 Bold (368)
Title3 1 Default (445), 2 Bold (479)
Headline 1 Default (545), 4 Bold Italic (577)
Body 1 Default (639), 2 Bold (671), 3 Italic (702), 4 Bold Italic (735)
Callout 1 Default (807), 2 Bold (838), 3 Italic (868), 4 Bold Italic (899)
Subheadline 1 Default (970), 2 Bold (1000), 3 Italic (1029), 4 Bold Italic (1060)
Footnote 1 Default (1130), 2 Bold (1158), 3 Italic (1185), 4 Bold Italic (1214)
Caption1 1 Default (1282), 2 Bold (1308), 3 Italic (1333), 4 Bold Italic (1360)
Caption2 1 Default (1426), 2 Bold (1449), 3 Italic (1471), 4 Bold Italic (1495)

The Dark and Light boards are identical apart from colours (checked by comparing all 142 layer lines with colours removed).

Sizes

Cells are weight, point size / line height, from the specimen text layers. R = SFPro-Regular, SB = SFPro-Semibold. No layer on the page has tracking (kern) set. Headline is Semibold at every size and every other style is Regular at every size (checked across all 132 specimen layers).

Standard sizes

Style xSmall Small Medium Large (Default) xLarge xxLarge xxxLarge
Large Title R 31/38 R 32/39 R 33/40 R 34/41 R 36/43 R 38/46 R 40/48
Title 1 R 25/31 R 26/32 R 27/33 R 28/34 R 30/36 ⚠ R 32/39 R 34/41
Title 2 R 19/23 ⚠ R 20/24 ⚠ R 21/28 ⚠ R 22/28 R 24/30 R 26/32 R 28/34
Title 3 R 17/22 R 18/23 R 19/24 R 20/25 R 22/28 R 24/30 R 26/32
Headline SB 14/19 SB 15/20 SB 16/21 SB 17/22 SB 19/24 SB 21/26 SB 23/29
Body R 14/19 R 15/20 R 16/21 R 17/22 R 19/24 R 21/26 R 23/29
Callout R 13/18 R 14/19 R 15/20 R 16/21 R 18/23 R 20/24 ⚠ R 22/28
Subhead R 12/16 R 13/18 R 14/19 R 15/20 R 17/22 R 19/24 R 21/28
Footnote R 12/16 R 12/16 R 12/16 R 13/18 R 15/20 R 17/22 R 19/24
Caption 1 R 11/13 R 11/13 R 11/13 R 12/16 R 14/19 R 16/21 R 18/23
Caption 2 R 11/13 R 11/13 R 11/13 R 11/13 R 13/18 R 15/20 R 17/22

Accessibility sizes

Style AX1 AX2 AX3 AX4 AX5
Large Title R 44/52 R 48/57 R 52/61 R 56/66 R 60/70
Title 1 R 38/46 R 43/51 R 48/57 R 53/62 R 58/68
Title 2 R 34/41 R 43/51 ⚠ R 44/52 R 50/59 R 56/66
Title 3 R 31/38 R 37/44 R 43/51 R 43/51 ⚠ R 55/65
Headline SB 28/34 SB 33/40 SB 40/48 SB 47/56 SB 53/62
Body R 28/34 R 33/40 R 40/48 R 47/56 R 53/62
Callout R 26/32 R 32/39 R 38/46 R 44/52 R 51/60
Subhead R 25/31 R 30/37 R 36/43 R 42/50 R 49/58
Footnote R 23/29 R 27/33 R 33/40 R 38/46 R 44/52
Caption 1 R 22/28 R 26/32 R 32/39 R 37/44 R 43/51
Caption 2 R 20/25 R 24/30 R 29/35 R 34/41 R 40/48

Where the specimen layer and the printed legend disagree (⚠)

Each column also prints its values as a legend ("R34, 41L" = Regular 34 pt, 41 leading). The dump truncates each legend after the Footnote row, so Caption 1 and Caption 2 can only be read from the specimen layers. Where both exist they agree except for these seven cells:

Size Style Specimen layer (line) Legend (line)
xSmall Title 2 R 19/23 (L107) R19, 24L (L84)
Small Title 2 R 20/24 (L119) R20, 25L (L85)
Medium Title 2 R 21/28 (L131) R21, 26L (L86)
xLarge Title 1 R 30/36 (L156) R30, 37L (L88)
xxLarge Callout R 20/24 (L163) R20, 25L (L89)
AX2 Title 2 R 43/51 (L39) R39, 47L (L9)
AX4 Title 3 R 43/51 (L62) R49, 58L (L11)

The two AX cells look like copy errors in the specimen layer: AX2 Title 2 equals AX2 Title 1, and AX4 Title 3 equals AX3 Title 3 and is smaller than AX4 Body. The legend values keep each style between its neighbours. Line numbers are grep -n line numbers (the AX4 and several standard legend texts contain carriage returns, which some tools count as extra lines).

Large (Default) and the shared text styles

The Large (Default) specimens are the only ones bound to text styles: library styles lib:<Style>/1 Default/1 Light/1 Label Color/1 Left Aligned (for example lib:Body/1 Default/1 Light/1 Label Color/1 Left Aligned). Their values match the 1 Default rows in text-styles.md for all 11 styles (derived by comparing the two tables).

Colours and states

Text Styles boards: one column per label colour. All 34 specimens in a column use the same swatch (counted: 34 per column per board).

Column (x) Header text Light board Dark board
20 Label Color #000000 {Labels/Light/1 Primary} #FFFFFF {Labels/Dark/1 Primary}
259 Secondary Label Color #3C3C43@60% {Labels/Light/2 Secondary} #EBEBF5@60% {Labels/Dark/2 Secondary}
490 Tertiary Label Color #3C3C43@30% {Labels/Light/3 Tertiary} #EBEBF5@30% {Labels/Dark/3 Tertiary}
710 Quaternary Label Color #3C3C43@18% {Labels/Light/4 Quaternary} #EBEBF5@16% {Labels/Dark/4 Quaternary}
Board background — #FFFFFF #000000
Column headers (Labels) — #000000 (no swatch) #FFFFFF {Labels/Dark/1 Primary}

Dynamic Type tables: specimens #000000 on #FFFFFF; titles, subtitles, size labels and legends #FFFFFF on the #999999 {Disabled - Light} frame. Disabled - Light is not one of the swatches in specs/tokens.txt.

Text

Specimen fonts per text style on the Text Styles boards (font, size, line height, textstyle=). These match text-styles.md except where marked.

Style token Font Size / lh
01 LargeTitle/1 Default · /2 Bold SFPro-Regular · SFPro-Bold 34 / 41
02 Title1/1 Default · /2 Bold SFPro-Regular · SFPro-Bold 28 / 34
03 Title2/1 Default · /2 Bold SFPro-Regular · SFPro-Bold 22 / 28
04 Title3/1 Default · /2 Bold SFPro-Regular · SFPro-Semibold 20 / 25
05 Headline/1 Default · /4 Bold Italic SFPro-Semibold · SFPro-SemiboldItalic 17 / 22
06 Body/1–4 Regular · Semibold · RegularItalic · SemiboldItalic 17 / 22
07 Callout/1–4 Regular · Semibold · RegularItalic · SemiboldItalic 16 / 21
08 Subheadline/1–4 Regular · Semibold · RegularItalic · SemiboldItalic 15 / 20
09 Footnote/1–4 Regular · Semibold · RegularItalic · SemiboldItalic 13 / 18
10 Caption1/1–4 Regular · Semibold · RegularItalic · SemiboldItalic 12 / 16
11 Caption2/1–4 Regular · Semibold · RegularItalic · SemiboldItalic 11 / 13

Caption1: the specimens bound to 10 Caption1/2 Bold and 10 Caption1/4 Bold Italic use SFPro-Semibold and SFPro-SemiboldItalic (lines 190 and 188 on the Dark board, and the same on the Light board), while the tokens store SFPro-Medium and SFPro-MediumItalic. The column headers bound to 10 Caption1/2 Bold use SFPro-Medium 12 / 16, as the token does.

Documentation text on the Dynamic Type tables:

Layer Font Size / lh Colour Text style
Title SFPro-Bold 22 / 28 #FFFFFF lib:Title2/2 Bold/2 Dark/1 Label Color/1 Left Aligned
Subtitle SFPro-Regular 15 / 20 #FFFFFF lib:Subheadline/1 Default/2 Dark/1 Label Color/1 Left Aligned
Size labels SFPro-Regular 11 / 13 #FFFFFF none
Legend columns SFPro-Regular 11 / 90 #FFFFFF none

All text is left aligned.

Kit notes

  • The tables state that font sizes are in points. Legend key, from the subtitle: L = Light, R = Regular, SB = Semibold for the weight letter before the size; the L after the second number means leading. Both subtitles are cut off in the dump ("L=Leading (Tight l…" on the standard table, "B=Sugge…" on the AX table), so the rest of the key is not available.
  • Light (L) never appears in the legends or specimens; only R and SB are used.
  • Large (Default) is marked as the default size in its column label.
  • The header begins "Apple provides two typeface families tha…"; the rest is truncated in the dump.
  • The Text Styles boards show each style in the four label colours for Light and Dark. Headline has only Default and Bold Italic; LargeTitle, Title1, Title2 and Title3 have only Default and Bold.
  • Loose and tight leading values are not on this page; they are in text-styles.md (Loose Leading/…, Tight Leading/…). Dynamic Type sizes for loose or tight leading: Not in the kit.

Finding it in the spec

What Pattern
Both Dynamic Type tables grep -n '^group "Dynamic Type Table' specs/text-styles-and-dynamic-type.txt
One size column grep -n -A11 '^ group "xLarge"' specs/text-styles-and-dynamic-type.txt (swap the size name; "Large (Default)", "AX3" …)
One style at every size grep -n '^ text "Title 2" ' specs/text-styles-and-dynamic-type.txt
Legend columns grep -n '^ text "R[0-9]' specs/text-styles-and-dynamic-type.txt
Text Styles boards grep -n '^group "Text Styles' specs/text-styles-and-dynamic-type.txt
Specimens of one token grep -n 'textstyle="10 Caption1/2 Bold"' specs/text-styles-and-dynamic-type.txt
One label colour grep -n '{Labels/Light/3 Tertiary}' specs/text-styles-and-dynamic-type.txt