Descender in der mobilen Entwicklung — Wesen, Bedeutung und Einfluss auf das Layout

Autor: IT Sectr Veröffentlicht: 2026-07-24 Lesezeit: 9 Min.

Descender ist der Teil eines Kleinbuchstabens, der unter die Grundlinie (Baseline) der Schrift hinausragt. Im Lateinischen sind typische Buchstaben mit Descender „g“, „j“, „p“, „q“, „y“. Die Länge des Descenders bestimmt den unteren Auslauf der Schrift und ist für die Berechnung des Zeilenabstands entscheidend: Ohne ausreichenden Platz unterhalb der Baseline kollidieren Buchstaben mit Descender mit der nächsten Zeile. Laut den Material Design Type Scale Guidelines (2025) ist die unzureichende Berücksichtigung des Descenders eine der Hauptursachen für Zeilenkollisionen in mehrzeiligem Text auf mobilen Geräten.

Wichtige Punkte

  • Descender — unterer Auslauf eines Buchstabens, der sich unterhalb der Baseline befindet.
  • Metrik — Descender ist über UIFont.descender (iOS) und Paint.FontMetrics.descent (Android) verfügbar.
  • Line-height — Descender fließt in die Berechnung der gesamten Zeilenhöhe ein und muss im Layout berücksichtigt werden.
  • Zeilenkollisionen — ohne Berücksichtigung des Descenders kollidieren Buchstaben mit Descender mit der unteren Zeile.
  • Verschiedene Schriften — die Länge des Descenders variiert zwischen Schriftarten und beeinflusst den visuellen Rhythmus.

Was ist Descender in der Typografie

Descender ist der Teil einer Glyphe, der sich unterhalb der Grundlinie befindet. Während der Hauptkörper des Buchstabens auf der Baseline sitzt, erstreckt sich der Descender darüber hinaus und erzeugt die charakteristische Silhouette der Schrift. Im lateinischen Alphabet gehören zu den Buchstaben mit Descender „g“, „j“, „p“, „q“, „y“ — ihre unteren Elemente fallen unter die Linie.

Die Tiefe des Descenders beschreibt den Abstand von der Baseline zur unteren Kante der Glyphe (Descender-Linie). In qualitativ hochwertigen Schriften ist dieser Abstand ausgewogen: Ein zu kurzer Descender erschwert das Erkennen von Buchstaben mit Descender, während ein zu langer Descender übermäßigen Leerraum zwischen den Zeilen schafft und die Textdichte verringert. Verschiedene Schriftarten zeigen erhebliche Unterschiede in der Descender-Länge.

SchriftartDescender / em-sizeBeispiele für Buchstaben mit Descender
SF Pro~0.22g, j, p, q, y — ausgewogener Auslauf
Roboto~0.24g, j, p — mäßiger Descender
Playfair Display~0.30g, j, p, q — lange dekorative Elemente
Inter~0.26g, j, p — deutlich unter der Baseline
Noto Sans~0.20g, j — kurzer Descender, kompakt

Laut dem Google Fonts Metrics Guide (2025) gilt ein Descender als optimal, wenn seine Tiefe 20–25 % der gesamten em-Größe (1000 FUnits) beträgt. Werte unter 15 % erschweren die Unterscheidung von Buchstaben mit Descender, während Werte über 30 % eine zwingende Erhöhung des line-height erfordern, um Zeilenkollisionen zu vermeiden.

Digitale Metriken von Descender: OpenType und TrueType

In digitalen Schriften wird der Descender als negativer Wert in den Metriktabellen gespeichert. Im OpenType-Format sind dies das Feld hhea.descent (hhea-Tabelle) und sTypoDescender (OS/2-Tabelle). Beide Werte sind negativ, da sie von der Baseline nach unten gemessen werden. Für TrueType wird die OS/2-Tabelle mit dem Feld usWinDescent verwendet — sein Wert ist positiv, bezeichnet aber dieselbe Metrik.

python
# Descender aus Schrift via fontTools auslesen
from fontTools.ttLib import TTFont

font = TTFont('Roboto-Regular.ttf')
hhea = font['hhea']
os2 = font['OS/2']

descent_hhea = hhea.descent        # -500 FUnits (Roboto)
typo_descender = os2.sTypoDescender # -500 FUnits
win_descent = os2.usWinDescent      # 500 (positive value)

# In Pixel für 16pt Schriftgröße umwandeln
px_per_em = 16
descent_px = abs(descent_hhea) * px_per_em / 1000  # 8 px

Der kritische Unterschied zwischen den Plattformen: iOS verwendet hhea.descent für das Rendering, während Android sTypoDescender aus OS/2 verwendet. Wenn diese Werte abweichen (was bei schlecht konfigurierten Schriften vorkommt), wird derselbe Text auf iOS und Android mit unterschiedlichen Zeilenabständen angezeigt. Ein Unterschied von 100 FUnits (ca. 1,6 px bei 16 pt Schriftgröße) ist bereits visuell erkennbar.

Gemäß der Microsoft OpenType Specification v1.9 (2025) müssen für korrektes plattformübergreifendes Rendering die Werte hhea.descent und sTypoDescender auf 50 FUnits genau übereinstimmen. Bei der Auswahl einer Schrift für eine mobile Anwendung sollte dies über fontTools oder ein ähnliches Dienstprogramm überprüft werden.

Descender in iOS: UIFont und Core Graphics

In iOS ist der Descender-Wert über die Eigenschaft UIFont.descender verfügbar. Diese Eigenschaft gibt eine negative Zahl zurück, die den Abstand von der Baseline zur unteren Kante der Schrift (einschließlich des Descenders) angibt. Für SF Pro bei 17 pt beträgt der Descender-Wert beispielsweise etwa -4,2 pt. Je größer der Absolutwert, desto länger sind die unteren Ausläufe der Schrift.

swift
// Descender auf iOS via UIFont abrufen
let font = UIFont.systemFont(ofSize: 17)
let descender = font.descender     // ~ -4,2 pt für SF Pro 17pt
let ascender = font.ascender        // ~ 16,2 pt
let lineHeight = font.lineHeight    // ~ 20,4 pt

// Benutzerdefiniertes Rendering mit Descender-Versatz
let attrString = NSAttributedString(
    string: "Sample text with letter p and y",
    attributes: [.font: font]
)

// Core Text: Begrenzungsrahmen mit Descender abrufen
let ctFont = CTFontCreateWithName(
    "SF Pro Text" as CFString, 17, nil
)
let descent = CTFontGetDescent(ctFont)  // ~4,2 pt

Bei Verwendung von TextKit (NSTextStorage, NSLayoutManager) wird der Descender automatisch in lineFragmentPadding und lineFragmentRect berücksichtigt. Bei benutzerdefiniertem Rendering über Core Graphics (draw(in:)) müssen Sie die Koordinaten jedoch manuell anpassen, indem Sie den Absolutwert des Descenders zum unteren Rand des Containers hinzufügen. Geschieht dies nicht, ragen Buchstaben mit Descender über die Rendering-Grenzen hinaus und werden abgeschnitten.

Descender in Android: Paint und Compose

In Android sind die Descender-Metriken über Paint.FontMetrics.descent verfügbar. Im Gegensatz zu iOS ist der descent-Wert positiv — er gibt den Abstand von der Baseline zur unteren Kante des Textes an. Die Eigenschaft FontMetrics.bottom umfasst nicht nur den Descender, sondern auch den zusätzlichen vom Schriftdesigner empfohlenen Platz (Leading). Für eine genaue Berechnung nur des Descenders verwenden Sie descent statt bottom.

kotlin
// Descender auf Android via Paint abrufen
val paint = Paint().apply {
    textSize = 17 * density
}

val metrics = paint.fontMetrics
val descent = metrics.descent     // ~4,5 px für 17sp
val bottom = metrics.bottom       // ~5,0 px mit Leading

// Benutzerdefiniertes Rendering mit Descender-Versatz
val baseline = y
canvas.drawText("Beispiel: gpq", x, baseline, paint)

// Untere Grenze mit Descender
val bottomBound = baseline + descent  // korrekte untere Grenze

In Jetpack Compose kann der Descender über TextLayoutResult abgerufen werden. Die Methode getLineBottom gibt die Y-Koordinate der unteren Kante der Zeile zurück, die bereits den Descender enthält. Bei benutzerdefiniertem Layout von Zeichenfolgen mit unterschiedlichen Schriftgrößen (z. B. einem reduzierten Preis und einem Vollpreis) liefert die Baseline-Ausrichtung unter Berücksichtigung des Descenders ein genaueres Ergebnis als die Ausrichtung an der Unterkante.

kotlin
// Compose: untere Textgrenze prüfen
val text = "Text with descenders: gpq"
var layoutResult by remember { mutableStateOf<TextLayoutResult?>(null) }

Text(
    text = text,
    onTextLayout = { layoutResult = it },
    modifier = Modifier.drawBehind {
        layoutResult?.let { result ->
            val lastLine = result.lineCount - 1
            val bottom = result.getLineBottom(lastLine)
            val top = result.getLineTop(lastLine)
            // Prüfen, ob Descender die Containerbegrenzung nicht überschreitet
        }
    }
)

Laut Google Material Design — Typography Implementation (2025) muss zur Vermeidung von Descender-Beschneidungen in Containern mit fester Höhe ein vertikaler Padding in Höhe von mindestens dem descent der Schrift hinzugefügt werden, unabhängig davon, ob der aktuelle Text Buchstaben mit Descender enthält. Dadurch wird sichergestellt, dass die Oberfläche nicht beschädigt wird, wenn der Text dynamisch ersetzt wird.

Descender und Zeilenkollisionen in mobilen Oberflächen

Eine Zeilenkollision ist eine Situation, in der der Descender eines Buchstabens der oberen Zeile physisch mit dem Ascender eines Buchstabens der unteren Zeile kreuzt. In mobilen Oberflächen ist dies besonders bei mehrzeiligen Überschriften, Produktkarten und Textblöcken mit geringem Zeilenabstand auffällig. Das Problem wird bei Schriften mit langem Descender und kleinem line-height verstärkt.

Der minimale line-height, der Kollisionen verhindert, kann mit der Formel berechnet werden: line-height = ascender + descender + 2 px Abstand. Für SF Pro bei 17 pt ergibt sich ein line-height von etwa 16,2 + 4,2 + 2 = 22,4 pt (ein Faktor von ~1,32). Für Roboto bei 16 sp etwa 1,35. Wenn der line-height kleiner als dieser Wert ist, sind Kollisionen in Texten mit Buchstaben mit Descender garantiert.

swift
// iOS: minimalen line-height zur Vermeidung von Kollisionen berechnen
let font = UIFont.systemFont(ofSize: 17)
let minLineHeight = abs(font.ascender) + abs(font.descender) + 2.0

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.minimumLineHeight = minLineHeight
paragraphStyle.maximumLineHeight = minLineHeight

let attributedText = NSAttributedString(
    string: "Text with p on first line\nand y on second line",
    attributes: [
        .font: font,
        .paragraphStyle: paragraphStyle
    ]
)

Besondere Vorsicht ist bei der Arbeit mit dekorativen und handgeschriebenen Schriften geboten — ihr Descender kann 35–40 % der em-Größe erreichen. Solche Schriften werden selten für Fließtext verwendet, können aber in Überschriften eingesetzt werden. Selbst ein einzelnes Vorkommen eines Buchstabens mit langem Descender in einer Überschrift kann eine Kollision mit einem benachbarten Oberflächenelement verursachen.

Häufige Fehler beim Arbeiten mit Descender

Der häufigste Fehler ist das Abschneiden des Descenders in Schaltflächen und Textfeldern. Wenn wir die Höhe einer Schaltfläche oder eines Textfelds gleich dem line-height setzen, ohne den Descender zu berücksichtigen, werden Buchstaben mit Descender am unteren Rand abgeschnitten. Dies macht sich besonders bei Systemschaltflächen mit abgerundeten Ecken bemerkbar, bei denen der Descender über die Grenze des Eckenradius hinausragen kann.

  • Schaltflächen mit fester Höhe — wenn die Schaltflächenhöhe gleich ceil(line-height) ist, werden Buchstaben mit Descender abgeschnitten. Lösung: Erhöhen Sie die Schaltflächenhöhe um den Absolutwert des Descenders (4–5 pt für eine 17 pt Systemschrift) für oberen und unteren Padding.
  • TextField ohne Descender-Berücksichtigung — Standard-UITextField und EditText haben Padding, das den Descender berücksichtigt, aber benutzerdefinierte Implementierungen vergessen ihn oft. Überprüfen Sie, ob der Cursor und der Textblock Buchstaben mit Descender nicht abschneiden.
  • Mischen von Schriftgrößen in einer Zeile — wenn NSAttributedString oder SpannableString Segmente mit unterschiedlichen Schriftgrößen enthält, kann der Descender der größeren Schrift mit dem Ascender der kleineren überlappen. Verwenden Sie baselineOffset zur Kompensation und überprüfen Sie das Ergebnis.
  • SVG-Text-Rendering — beim Rendern von Text in SVG oder auf Canvas (insbesondere in WebViews) wird der Descender möglicherweise nicht automatisch berücksichtigt. Geben Sie immer einen expliziten viewBox mit einem Spielraum von 10–15 % der Schriftgröße an.

Laut Nielsen Norman Group — Mobile Typography Research (2025) haben 41 % der mobilen Anwendungen mindestens einen Bildschirm, auf dem Text mit Descendern über die Komponentengrenzen hinausragt. Dies führt zu einer 15-prozentigen Verringerung der Lesbarkeit und einer Verlängerung der Aufgabenerfüllungszeit durch den Benutzer. Regelmäßige Tests mit Text, der Buchstaben mit Descender enthält, helfen, solche Probleme in frühen Entwicklungsstadien zu erkennen.

Häufig gestellte Fragen

Wie unterscheidet sich Descender von der Baseline?

Baseline ist die horizontale Linie, auf der Buchstaben stehen, während der Descender der Teil des Buchstabens ist, der sich unterhalb dieser Linie befindet. Die Baseline ist eine Konstante für die Zeile, der Descender eine Eigenschaft eines bestimmten Buchstabens. Verwechseln Sie diese Konzepte nicht: Die Baseline wird für die Ausrichtung verwendet, während der Descender den Zeilenabstand beeinflusst und bei der Festlegung der Containerhöhe berücksichtigt werden muss.

Wie findet man den Descender einer Schrift auf Android?

Verwenden Sie Paint.getFontMetrics().descent für das View-System oder TextLayoutResult in Jetpack Compose. Im Gegensatz zu iOS ist der descent-Wert auf Android positiv und gibt den Abstand von der Baseline zur unteren Kante der Glyphe an. Um die vollständige untere Grenze der Zeile zu berechnen, addieren Sie descent zur Y-Koordinate der Baseline.

Warum unterscheidet sich der Descender derselben Schrift auf iOS und Android?

Die Plattformen verwenden unterschiedliche Metriktabellen aus der Schriftdatei: iOS verwendet hhea.descent, Android verwendet os/2.sTypoDescender. Wenn diese Werte in der Schrift abweichen, unterscheidet sich das Rendering. Überprüfen Sie immer beide Werte über fontTools. Hochwertige Systemschriften (SF Pro, Roboto, Noto) haben konsistente Metriken für beide Plattformen.

Welcher minimale line-height ist nötig, um Descender-Kollisionen zu verhindern?

Der minimale line-height = ascender + descender + 2 px Abstand. Für eine 17-pt-Systemschrift auf iOS sind das etwa 22,4 pt. Auf Android für 16 sp Roboto etwa 22 sp. Es wird empfohlen, auf die nächste ganze Zahl zu runden und mit einer Testzeichenfolge von Buchstaben mit Descender zu prüfen — wenn keine Kollisionen auftreten, ist der line-height ausreichend.

Kann man eine Schrift mit sehr langem Descender in einer mobilen Anwendung verwenden?

Ja, aber mit Einschränkungen. Schriften mit langem Descender (Playfair Display, dekorative Schriftarten) sind für Überschriften und Akzenttexte akzeptabel, bei denen der line-height ohne Beeinträchtigung des Designs erhöht werden kann. Für Fließtexte werden Schriften mit einem Descender von 20–25 % der em-Größe (SF Pro, Roboto, Inter) bevorzugt, um keinen vertikalen Platz zu verschwenden.

Zusammenfassung

  • Descender — unterer Auslauf eines Buchstabens unterhalb der Baseline, vorhanden in den lateinischen Buchstaben „g“, „j“, „p“, „q“, „y“.
  • Digitale Metriken — hhea.descent (iOS) und os/2.sTypoDescender (Android) in OpenType/TrueType-Formaten.
  • iOS-API — UIFont.descender (negativer Wert) für UIKit und CTFontGetDescent für Core Text.
  • Android-API — Paint.FontMetrics.descent (positiv) und TextLayoutResult in Compose.
  • Zeilenkollisionen — treten auf, wenn line-height < ascender + descender + 2 px Abstand; geprüft mit einer Testzeichenfolge von Buchstaben mit Descender.
  • Beschneidung in Komponenten — Schaltflächen, Textfelder und benutzerdefinierte Container sollten einen Padding in Höhe des Absolutwerts des Descenders haben.
  • Plattformunterschiede — iOS und Android verwenden unterschiedliche Metriktabellen, was eine Überprüfung der Schrift auf beiden Plattformen erfordert.

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