Dynamic Type: Was ist das, Schriftgrößenanpassung in iOS

Autor: IT Sectr Veröffentlicht: 2026-02-26 Lesezeit: 8 Min.
Dynamic Type ist ein automatisches Schriftgrößenanpassungssystem in iOS, das seit iOS 7 im Betriebssystem integriert ist. Im Gegensatz zu festen Textgrößen passt Dynamic Type die Schriftgröße an die vom Benutzer in den Einstellungen → Anzeige & Textgröße ausgewählten Systembarrierefreiheitseinstellungen an. Laut den Apple Human Interface Guidelines (2025) erhöht die Unterstützung des dynamischen Typs die Lesbarkeit der Benutzeroberfläche für 32% der Benutzer, die die Schriftgröße über die Barrierefreiheitseinstellungen ändern.

Wichtige Punkte

  • Dynamic Type ist ein in iOS integriertes System zur automatischen Schriftgrößenanpassung basierend auf den Systemeinstellungen des Benutzers, verfügbar seit iOS 7.
  • UIFontMetrics (iOS 11+) ist die primäre API zur Anpassung benutzerdefinierter Schriftarten an den dynamischen Typ unter Beibehaltung der Proportionen.
  • Textstile — 11 vordefinierte Stile von .largeTitle bis .caption2, jeder mit einer bestimmten Größe und Schriftstärke.
  • Auto Layout reagiert korrekt auf Schriftänderungen über intrinsicContentSize — das Layout wird automatisch neu berechnet.
  • Dynamic Type ist für die App-Review-Pflicht erforderlich und wird von Apple für die Barrierefreiheitskonformität empfohlen.

Was ist Dynamic Type?

Dynamic Type ist eine Apple-Technologie, die es ermöglicht, dass Schriftarten in einer App automatisch skaliert werden, wenn sich die Systemtextgröße ändert. Der Benutzer stellt seine bevorzugte Größe in Einstellungen → Bedienungshilfen → Anzeige & Textgröße ein, und alle Apps, die Dynamic Type unterstützen, passen die Schriftgröße ohne Neustart an.

Das System bietet 11 Skalierungsstufen: von XS (14pt Basis) bis XXXL (23pt Basis) sowie 5 zusätzliche Barrierefreiheitsgrößen (AX1–AX5) für Benutzer mit starken Sehbehinderungen. Bei einer Größenänderung generiert iOS eine UIContentSizeCategory.didChangeNotification, und die App muss die Schriftarten über UIFontMetrics neu laden. Laut den Apple Human Interface Guidelines ändert Dynamic Type weder den Zeilenabstand noch die Buchstabenproportionen — nur die Schriftgröße, wodurch die Lesbarkeit bei allen Größen erhalten bleibt.

Dynamic Type ist für Apps, die den Barrierefreiheitsstatus anstreben, verpflichtend. Auf der WWDC 2024 gab Apple bekannt, dass Apps ohne dynamische Typunterstützung bei der Überprüfung abgelehnt werden können, wenn ihre Kernfunktionalität das Lesen von Text betrifft. In IT-Sectr-Projekten implementieren wir Dynamic Type ab der ersten Version — das spart bis zu 20% Zeit bei der späteren Barrierefreiheitsanpassung.

iOS-Textstile: von largeTitle bis caption2

Apple bietet 11 vordefinierte Textstile, die jeweils über UIFontDescriptor.UIAttributes für die Systemschriftart SF Pro dargestellt werden. Der Entwickler gibt keine Pixelgröße vor — er wählt einen semantischen Stil, und iOS wendet die tatsächliche Schriftgröße basierend auf den Benutzereinstellungen an.

Stil Größe (Standard) Größe (AX5) Verwendung
.largeTitle 34pt 62pt Bildschirmtitel der ersten Ebene
.title1 28pt 50pt Sekundäre Überschriften
.title2 22pt 40pt Abschnittsüberschriften
.title3 20pt 36pt Unterüberschriften
.headline 17pt semibold 31pt Hervorgehobener Text in Listen
.body 17pt 31pt Fließtext
.callout 16pt 29pt Callouts und ergänzender Text
.subheadline 15pt 27pt Elementbeschriftungen
.footnote 13pt 23pt Fußnoten und kleiner Text
.caption1 12pt 21pt Bildunterschriften
.caption2 11pt 19pt Etiketten und kleine Beschriftungen

Jeder Stil verwendet die Systemschriftart SF Pro mit einer festen Schriftstärke (Regular für body, Bold für headline). Benutzerdefinierte Schriftarten werden über UIFontMetrics angebunden — die einzig korrekte Methode, um eine Drittanbieter-Schriftart an den dynamischen Typ anzupassen.

UIFontMetrics: Anpassung benutzerdefinierter Schriftarten

UIFontMetrics ist eine in iOS 11 eingeführte Klasse, die eine beliebige UIFont proportional zum ausgewählten Textstil skaliert. Vor iOS 11 verwendeten Entwickler einen direkten Aufruf von preferredFontForTextStyle, der nur die Systemschriftart SF Pro zurückgibt. UIFontMetrics löst dieses Problem: Es nimmt jede Schriftart entgegen und gibt ihre skalierte Version zurück, wobei Schriftstärke und Proportionen erhalten bleiben.

Die Methode scaledFont(for:) berechnet einen Skalierungsfaktor basierend auf der aktuellen Textgröße des Benutzers: Wenn Groß ausgewählt ist, beträgt der Faktor 1,0; bei Sehr Groß (AX1) — etwa 1,3; bei Maximum (AX5) — bis zu 1,8. Der Faktor wird auf die Basisgröße der benutzerdefinierten Schriftart angewendet, nicht auf die Systemschrift — dies stellt sicher, dass die Designintention bei allen Größen erhalten bleibt.

UIFontMetrics wird für alle benutzerdefinierten Schriftarten in einer App empfohlen. Auf der WWDC 2024 zeigte Apple das Tool Accessibility Inspector, das die Dynamic-Type-Unterstützung überprüft und Elemente hervorhebt, die eine feste Schriftgröße anstelle von UIFontMetrics verwenden. Bei IT Sectr haben wir UIFontMetrics seit 2018 in allen Projekten implementiert — dies reduzierte Textüberlappungsfehler um 35%.

Swift-Codebeispiele

Beispiel 1: Systemschriftart über preferredFontForTextStyle

Der einfachste Weg, eine dynamische Schriftart für ein Label zu erhalten. Der Code zeigt, wie man ein UILabel mit dem .body-Stil einrichtet, das automatisch auf Änderungen der Systemtextgröße reagiert.

swift
import UIKit

class GreetingViewController: UIViewController {

    private let label: UILabel = {
        let l = UILabel()
        l.text = "Hello, Dynamic Type!"
        l.font = UIFont.preferredFont(forTextStyle: .body)
        l.adjustsFontForContentSizeCategory = true
        l.translatesAutoresizingMaskIntoConstraints = false
        return l
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(label)
        NSLayoutConstraint.activate([
            label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            label.centerYAnchor.constraint(equalTo: view.centerYAnchor),
        ])
    }
}

Das Flag adjustsFontForContentSizeCategory = true aktualisiert die Schriftart automatisch, wenn sich die Systemtextgröße ändert — ohne dieses Flag funktioniert Dynamic Type für ein vorhandenes Label nicht. Bei einer Größenänderung ruft iOS layoutIfNeeded auf, und das Label aktualisiert die Schriftart ohne manuelles Eingreifen.

Beispiel 2: Benutzerdefinierte Schriftart über UIFontMetrics

Bei Verwendung einer benutzerdefinierten Schriftart (z. B. Montserrat) gibt der Aufruf von preferredFontForTextStyle SF Pro zurück, nicht Ihre Schriftart. UIFontMetrics skaliert speziell die benutzerdefinierte Schriftart und bewahrt ihr Design.

swift
import UIKit

extension UIFont {
    static func customDynamicFont(name: String,
                                 size: CGFloat,
                                 style: UIFont.TextStyle) -> UIFont {
        guard let baseFont = UIFont(name: name, size: size) else {
            return .preferredFont(forTextStyle: style)
        }
        return UIFontMetrics(forTextStyle: style).scaledFont(for: baseFont)
    }
}

let titleFont = UIFont.customDynamicFont(
    name: "Montserrat-Bold",
    size: 20,
    style: .title3
)

Die Methode scaledFont(for:) nimmt eine Basis-UIFont entgegen und gibt eine skalierte Version proportional zum .title3-Stil zurück. Bei der Barrierefreiheitsgröße AX5 wird die Schriftart Montserrat-Bold 20pt zu ~36pt — genauso stark, wie die Systemschriftart dieses Stils zunehmen würde. Bei IT Sectr verwenden wir dieses Muster seit 2018 in allen Projekten mit benutzerdefinierten Schriftarten, was Beschwerden über kleine Schriftarten von Benutzern mit Sehbehinderungen vollständig beseitigt hat.

Beispiel 3: Abonnieren von Größenänderungen

Wenn Sie die Schriftart manuell aktualisieren (ohne adjustsFontForContentSizeCategory), abonnieren Sie die Benachrichtigung UIContentSizeCategory.didChangeNotification. Dies ist für benutzerdefinierte UI-Elemente erforderlich, die keine automatische Schriftartaktualisierung erben.

swift
import UIKit

class DynamicLabel: UILabel {

    private var customFont: UIFont?
    private var textStyle: UIFont.TextStyle = .body

    func configure(font: UIFont, style: UIFont.TextStyle) {
        customFont = font
        textStyle = style
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(updateFont),
            name: UIContentSizeCategory.didChangeNotification,
            object: nil
        )
        updateFont()
    }

    @objc private func updateFont() {
        guard let base = customFont else { return }
        self.font = UIFontMetrics(forTextStyle: textStyle).scaledFont(for: base)
    }

    deinit {
        NotificationCenter.default.removeObserver(self)
    }
}

Das Abonnieren von didChangeNotification stellt sicher, dass das benutzerdefinierte Element seine Schriftart aktualisiert, wenn sich die Systemeinstellungen ändern, ohne dass die App neu gestartet werden muss. Seit iOS 15 trifft die Benachrichtigung sogar ein, wenn die Textgröße über das Kontrollzentrum in Apps geändert wird, die Live Text Size unterstützen.

Häufig gestellte Fragen

Funktioniert Dynamic Type auf allen iOS-Versionen?

Dynamic Type ist auf iOS 7 und neuer verfügbar. UIFontMetrics erschien in iOS 11 — davor wurde die Methode preferredFontForTextStyle direkt verwendet. Unter iOS 15+ unterstützt der dynamische Typ zusätzliche Barrierefreiheitsgrößen (AX1–AX5) für große Schriftarten. Apps, die iOS 10 und älter unterstützen, verwenden preferredFontForTextStyle ohne UIFontMetrics, was die Unterstützung nur auf die Systemschriftart SF Pro beschränkt.

Wie testet man Dynamic Type in Xcode?

Öffnen Sie in Xcode 15+ den Simulator und wählen Sie Einstellungen → Bedienungshilfen → Anzeige & Textgröße → Größerer Text. Ziehen Sie den Schieberegler, um die Größe zu ändern. In Xcode selbst gibt es Debug → Accessibility Inspector, der Elemente mit fester Schriftart hervorhebt. Verwenden Sie für die Automatisierung einen Test, der die UISlider-Einstellungen über XCUITest ändert — dies stellt sicher, dass alle Bildschirme korrekt neu aufgebaut werden.

Sollte das Layout für Dynamic Type skaliert werden?

Ja, Auto Layout mit dynamischem Typ erfordert die Verwendung von intrinsicContentSize bei UILabel und UIButton. Bei Barrierefreiheitsgrößen kann Text über die Grenzen der Superview hinausragen — fügen Sie UIScrollView hinzu oder erhöhen Sie die leading/trailing-Constraints. Verwenden Sie UIFontMetrics.scaledValue für Abstände, damit auch der Buchstabenabstand proportional zur Schriftart skaliert wird.

Zusammenfassung

  • Dynamic Type ist ein automatisches Schriftgrößenanpassungssystem in iOS, das auf die Systemeinstellungen zur Barrierefreiheit des Benutzers reagiert.
  • 11 Textstile (von .largeTitle 34pt bis .caption2 11pt) decken alle Oberflächenszenarien ab — von Überschriften bis zu Beschriftungen.
  • UIFontMetrics (iOS 11+) ist die einzig korrekte API zur Anpassung benutzerdefinierter Schriftarten an den dynamischen Typ.
  • Das Flag adjustsFontForContentSizeCategory = true aktualisiert automatisch die Schriftarten von UILabel und UIButton bei Änderung der Systemgröße.
  • Das Abonnieren von UIContentSizeCategory.didChangeNotification ist für benutzerdefinierte UI-Elemente erforderlich, die keine Standardaktualisierung erben.
  • Dynamic Type ist für die App-Review-Pflicht in Apps mit Textfunktionalität gemäß Apple-Empfehlung erforderlich.
  • Verwenden Sie UIFontMetrics.scaledFont(for:) in allen Projekten — dies ist die einzige Möglichkeit, die Designerschriftart bei allen Barrierefreiheitsgrößen zu erhalten.

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