Dynamic Type: Schlüsselkonzepte, Textstile und Funktionsweise in iOS

Autor: IT Sectr Veröffentlicht: 2026-05-16 Lesezeit: 9 Min.

Dynamic Type ist eine integrierte iOS-Funktion, die die Schriftgröße in einer App automatisch an die Systemeinstellungen des Benutzers anpasst. Der Benutzer stellt die bevorzugte Textgröße in Einstellungen → Bildschirm und Helligkeit → Textgröße ein, und alle Apps, die Dynamic Type unterstützen, passen sich ohne zusätzliche Aktionen an. Laut den Apple Human Interface Guidelines, 2024 ist die Unterstützung von Dynamic Type eine zwingende Voraussetzung für die Veröffentlichung im App Store, da es ein grundlegendes Element der Barrierefreiheit auf der iOS-Plattform ist.

Wichtige Punkte

  • Dynamic Type — ein iOS-Mechanismus zur automatischen Skalierung von Text entsprechend den System-Schriftgrößeneinstellungen
  • Die Unterstützung erfolgt durch Textstile (UIFont.TextStyle) — body, headline, caption, title und andere
  • Das System unterstützt 11 Stufen der Skalierung von XSmall bis AccessibilityXXXL
  • Für benutzerdefinierte Schriften wird die Methode UIFontMetrics verwendet, die jede Schrift relativ zum body-Stil skaliert
  • Das Layout muss adaptiv sein — UIStackView, Auto Layout und dynamische Zellenhöhen sind Pflicht

Was ist Dynamic Type in iOS

Dynamic Type ist eine iOS-Technologie, die in iOS 7 eingeführt wurde und es Text in einer App ermöglicht, sich automatisch an die System-Schriftgrößeneinstellungen anzupassen. Der Benutzer kann die Schrift in allen Apps gleichzeitig vergrößern oder verkleinern — ohne die Einstellungen in jeder einzelnen App ändern zu müssen.

Laut Apple WWDC 2023, „Make Your App Visually Accessible“ ändern über 40% der iOS-Benutzer die Schriftgröße gegenüber der Standardeinstellung. In der Altersgruppe 65+ erreicht dieser Wert 70%. Dynamic Type ist eine zwingende Voraussetzung für die Barrierefreiheitszertifizierung im App Store. Fehlende Unterstützung ist ein Grund für die Ablehnung der App während der Prüfung.

Funktionsweise: Die App verwendet UIFont.preferredFont(forTextStyle:) anstelle von UIFont(name:size:). iOS gibt automatisch eine Schrift zurück, die entsprechend der aktuellen Systemeinstellung skaliert wurde. Wenn die Größe in den Einstellungen geändert wird, generiert iOS eine Benachrichtigung UIContentSizeCategory.didChangeNotification — die App muss das Layout neu berechnen.

Geschichte von Dynamic Type

Dynamic Type erschien in iOS 7 zusammen mit dem flachen Design. iOS 10 fügte Unterstützung für benutzerdefinierte Schriften über UIFontMetrics hinzu. iOS 11 führte Barrierefreiheitsstufen (bis AccessibilityXXXL) ein. iOS 15 fügte Dynamic Type in SwiftUI mit automatischer Unterstützung hinzu. Mit jedem Release verschärft Apple die Anforderungen: Ab iOS 17 erhalten Apps ohne Dynamic Type-Unterstützung eine Warnung beim Hochladen in App Store Connect.

Textstile UIFont.TextStyle

iOS stellt 8 Textstile bereit, jeder mit einer vordefinierten Größe und Schriftstärke für die Standardeinstellung:

StilKonstanteGröße (L)Verwendung
Large Title.largeTitle34pxHaupttitel des Bildschirms
Title 1.title128pxAbschnittsüberschrift
Title 2.title222pxUnterüberschrift
Title 3.title320pxKartentitel
Headline.headline17px (fett)Fettdruck für Hervorhebung
Body.body17pxHaupttext
Callout.callout16pxErgänzungstext
Caption 1.caption112pxBildunterschrift
Caption 2.caption211pxKleine Bildunterschrift
Footnote.footnote13pxFußnote, Anmerkung

Den richtigen Stil zu verwenden, ist nicht nur eine Frage des „Aussehens“. UIFont.TextStyle.body kann im AccessibilityXXXL-Modus 53px erreichen. Wenn eine App eine feste Schriftgröße von 17px für Body verwendet, wird der Text für Benutzer, die die Schrift vergrößert haben, unlesbar.

Visuelle Hierarchie durch Stile

Dynamic Type skaliert nicht nur — es bewahrt die visuelle Hierarchie. Large Title ist immer größer als Title 1, der größer als Body ist, unabhängig von der Skalierungsstufe. Die Skalierungskoeffizienten unterscheiden sich: Überschriften werden aggressiver skaliert als der Haupttext, damit die Hierarchie auch auf Barrierefreiheitsstufen erhalten bleibt.

Skalierungsstufen

iOS unterstützt 11 Stufen der Textskalierung, unterteilt in zwei Kategorien:

  • Standardgrößen (5 Stufen): XS, S, M, L (Standard), XL
  • Barrierefreiheitsgrößen (6 Stufen): accessibilityXL, accessibilityXXL, accessibilityXXXL, accessibilityXXXXL, accessibilityXXXXXL, accessibilityXXXXXXL

Der Unterschied zwischen XS und AccessibilityXXXL für den body-Stil reicht von 14px bis 53px — fast Faktor 4×. Ein für 17px ausgelegtes Layout bricht bei 53px vollständig: Text überläuft, Schaltflächen überlappen sich, Zellen kollidieren.

Aktuelle Kategorie im Code prüfen:

swift
let category = UIApplication.shared.preferredContentSizeCategory
// .extraSmall, .small, .medium, .large, .extraLarge ...
if category.isAccessibilityCategory {
    // Alternative Layout aktivieren
}

traitCollection und Textgröße

Die Textgrößenkategorie ist über traitCollection.uiContentSizeCategory verfügbar. Wenn die Systemeinstellung geändert wird, ruft iOS traitCollectionDidChange auf allen UIView auf. In dieser Methode müssen Sie die Schriften aktualisieren und das Layout neu berechnen. SwiftUI erledigt dies automatisch — UIKit erfordert manuelles Abonnement.

Für UICollectionView verwenden Sie UICollectionViewCompositionalLayout — es passt die Anzahl der Spalten automatisch an die Bildschirmbreite und Textgröße an. Wechseln Sie auf Barrierefreiheitsstufen von einem zweispaltigen zu einem einspaltigen Layout, damit Text nicht abgeschnitten wird und Elemente nicht überlappen. Verwenden Sie bedingtes Layout: für reguläre Breite — zwei Spalten, für kompakte oder Barrierefreiheit — eine Spalte.

Implementierung in UIKit

Basisimplementierung in UIKit — UIFont.preferredFont(forTextStyle:). Diese Methode gibt eine entsprechend der aktuellen Systemeinstellung skalierte Schrift zurück:

swift
titleLabel.font = UIFont.preferredFont(forTextStyle: .headline)
bodyLabel.font = UIFont.preferredFont(forTextStyle: .body)

Für benutzerdefinierte Schriften verwenden Sie UIFontMetrics:

swift
let customFont = UIFont(name: "Montserrat-Regular", size: 16)!
titleLabel.font = UIFontMetrics(forTextStyle: .body)
    .scaledFont(for: customFont)

// Überwachung von Größenänderungen
NotificationCenter.default.addObserver(
    self,
    selector: #selector(preferredContentSizeChanged),
    name: UIContentSizeCategory.didChangeNotification,
    object: nil
)

Für UILabel im Interface Builder reicht es, die Schrift als Textstil festzulegen und „Automatically Adjusts Font“ zu aktivieren. Für benutzerdefinierte Schriften unterstützt Interface Builder UIFontMetrics nicht — nur über Code.

UIFontMetrics und Skalierungskurve

UIFontMetrics verwendet dieselbe Skalierungskurve wie preferredFont. Sie können fromTextStyle: .body, .headline usw. angeben. Jeder Stil hat seinen eigenen Skalierungskoeffizienten. Body skaliert moderat, Large Title skaliert aggressiv. Wenn Ihre benutzerdefinierte Schrift für den Haupttext verwendet wird, verwenden Sie .body.

Dynamic Type in SwiftUI

In SwiftUI ist die Dynamic Type-Unterstützung standardmäßig integriert. Alle Systemmodifikatoren (.font(.body), .font(.title)) skalieren automatisch. Der Entwickler muss UIFont.preferredFont nicht aufrufen.

Beispiel:

swift
Text("Haupttext")
    .font(.body)
    .lineLimit(nil)
    .minimumScaleFactor(0.5)

Für benutzerdefinierte Skalierungen verwenden Sie DynamicTypeSize:

swift
@Environment(\.dynamicTypeSize) var dynamicTypeSize

var body: some View {
    Text("Adaptiver Text")
        .font(.body)
        .padding(dynamicTypeSize <= .large ? 8 : 16)
}

SwiftUI aktualisiert die Ansicht automatisch, wenn sich die Systemtextgröße ändert — keine zusätzlichen Benachrichtigungsabonnements erforderlich.

Einschränkung von Dynamic Type in SwiftUI

Der Modifikator .font(.body) funktioniert nur für die Systemschrift. Für benutzerdefinierte Schriften in SwiftUI verwenden Sie Font.custom mit UIFontMetrics im Hintergrund. Ab iOS 16 unterstützt SwiftUI DynamicTypeSize in @Environment, was die Anpassung von Abständen und Layout ermöglicht.

Layout-Anpassung für große Schriften

Auto Layout ist eine Voraussetzung für die Dynamic Type-Unterstützung. Feste Breiten und Höhen (>=, <=) brechen bei Barrierefreiheitsgrößen. Verwenden Sie intrinsicContentSize für UILabel — es berechnet die Höhe automatisch für die aktuelle Schriftgröße.

Regeln für adaptives Layout:

  • UIStackView mit distribution = fill und spacing >= 8 — Elemente werden in die nächste Zeile umgebrochen
  • UITableViewCell mit automaticDimension — Zellenhöhe wird an den Inhalt angepasst
  • numberOfLines = 0 auf UILabel — Text wird nicht abgeschnitten, sondern umgebrochen
  • Schaltflächen mit edgeInsets — fügen Sie auf Barrierefreiheitsstufen über traitCollection.preferredContentSizeCategory Abstände hinzu

Für lange Texte (z. B. Artikel, Nutzungsbedingungen) setzen Sie minimumScaleFactor auf UILabel — dies verkleinert den Text als letzten Ausweg, wenn Auto Layout den Inhalt nicht aufnehmen kann. Ein Wert von 0.5 bedeutet, dass die Schrift auf 50% der bevorzugten Größe schrumpfen kann.

Beispiel für die Anpassung von Abständen an die Größenkategorie:

swift
let isAccessibility = traitCollection
    .preferredContentSizeCategory.isAccessibilityCategory
stackView.spacing = isAccessibility ? 16 : 8
button.contentEdgeInsets = isAccessibility
    ? UIEdgeInsets(top: 16, left: 24, bottom: 16, right: 24)
    : UIEdgeInsets(top: 8, left: 16, bottom: 8, right: 16)

Typische Layout-Probleme auf Barrierefreiheitsstufen

Textabschneidung — UILabel mit numberOfLines = 1 und fester Breite schneidet Text auf AccessibilityXL ab. Lösung: numberOfLines = 0 und trailing-Constraint. Überlappung von Elementen — Schaltflächen mit fester Höhe überlappen sich. Lösung: UIStackView mit automatischem Abstand. Inhalt außerhalb des Bildschirms — ScrollView ist für Barrierefreiheitsstufen obligatorisch.

Testen von Dynamic Type

Der Xcode-Simulator ermöglicht die Änderung der Textgröße: Gehen Sie im Simulator-Menü zu Settings → Accessibility → Display & Text Size → Larger Text. Wechseln Sie zwischen allen 11 Stufen und überprüfen Sie, ob Text nicht abgeschnitten wird, Schaltflächen zugänglich sind und das Layout nicht bricht.

Für automatisierte Tests verwenden Sie die contentSizeCategory-Einstellung in XCUIApplication:

swift
func testAccessibilitySizes() {
    let app = XCUIApplication()
    app.launchArguments += [
        "-UIPreferredContentSizeCategoryName",
        "UICTContentSizeCategoryAccessibilityXXXL"
    ]
    app.launch()
    app.scrollViews.buttons["Senden"].tap()
    XCTAssertTrue(app.staticTexts["Formular gesendet"]
        .waitForExistence(timeout: 5))
}

XCUITest mit verschiedenen launchArguments ermöglicht die Überprüfung aller Skalierungsstufen im CI. Vergessen Sie nicht, die Barrierefreiheitskategorien separat zu testen — sie brechen am häufigsten das Layout. Laut Apple werden 70% der Dynamic Type-Fehler speziell auf Barrierefreiheitsstufen gefunden, weil Entwickler nur Standardgrößen testen.

Accessibility Inspector: Überprüfung von Dynamic Type

Xcode Accessibility Inspector zeigt, welche Schriften das ausgewählte Element verwendet — fest oder skalierbar. Wenn das Element nicht auf Textgrößenänderungen im Simulator reagiert, wird eine feste Schrift verwendet. Ersetzen Sie sie durch UIFont.preferredFont oder UIFontMetrics.

Häufig gestellte Fragen

Was ist Dynamic Type in iOS in einfachen Worten?

Es ist die automatische Textskalierung in einer App entsprechend den Systemgrößeneinstellungen. Der Benutzer ändert die Größe in den Einstellungen — alle unterstützenden Apps passen sich ohne Eingriff des Entwicklers an.

Funktioniert Dynamic Type nur mit Systemschriften?

Nein. Für benutzerdefinierte Schriften verwenden Sie UIFontMetrics(scaledFont:). Diese Methode skaliert jede Schrift relativ zum angegebenen Textstil und bewahrt die Proportionen.

Wie viele Skalierungsstufen unterstützt iOS?

11 Stufen: 5 Standard (XS, S, M, L, XL) und 6 Barrierefreiheitsstufen (von AccessibilityXL bis AccessibilityXXXXXL). Die body-Schriftgröße kann von 14px bis 53px reichen.

Wie abonniere ich Textgrößenänderungen?

In UIKit über UIContentSizeCategory.didChangeNotification. In SwiftUI verwenden Sie @Environment(\.dynamicTypeSize) — die Ansicht wird automatisch aktualisiert, wenn sich die Systemeinstellung ändert.

Was passiert, wenn Dynamic Type nicht unterstützt wird?

Benutzer mit vergrößerter Schrift sehen abgeschnittenen Text, überlappende Elemente und defekte Schaltflächen. Die App kann bei der App Store-Prüfung wegen Verstoßes gegen Barrierefreiheitsanforderungen abgelehnt werden.

Zusammenfassung

  • Dynamic Type — integrierter iOS-Mechanismus zur Textskalierung nach Systemeinstellungen; Pflicht für den App Store
  • Verwenden Sie UIFont.preferredFont(forTextStyle:) für Systemschriften und UIFontMetrics für benutzerdefinierte
  • iOS unterstützt 11 Stufen der Skalierung — von XS bis AccessibilityXXXXXL (14–53px für body)
  • In SwiftUI funktioniert Dynamic Type automatisch über .font(.body) und @Environment(\.dynamicTypeSize)
  • Das Layout muss adaptiv sein: UIStackView, automaticDimension in Tabellen, numberOfLines = 0
  • Testen Sie alle 11 Stufen, insbesondere die Barrierefreiheitskategorien — 70% der Layouts brechen auf ihnen
  • Das Abonnement von UIContentSizeCategory.didChangeNotification ist für UIKit-Apps obligatorisch

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch