Leading i odstępy między wierszami: co to jest i konfiguracja w iOS i Android

Autor: IT Sectr Opublikowano: 2026-07-24 Czas czytania: 9 min

Leading (leading) — to odległość między liniami bazowymi sąsiednich wierszy tekstu, która bezpośrednio wpływa na wygodę czytania. Termin pochodzi od fizycznych czcionek typograficznych: między wiersze wkładano ołowiane paski (lead strips) w celu zwiększenia odstępu. W nowoczesnym programowaniu mobilnym leading jest implementowany przez lineSpacing i lineHeightMultiple na iOS w NSAttributedString oraz przez lineSpacing na Android w TextView. Według dokumentacji Apple NSMutableParagraphStyle, odstęp między wierszami określa się w punktach i można go łączyć z mnożnikiem wysokości wiersza.

Najważniejsze

  • Leading — odległość między liniami bazowymi wierszy, wpływająca na czytelność tekstu
  • Na iOS konfigurowany przez NSParagraphStyle: lineSpacing i lineHeightMultiple
  • Na Android zarządzany przez lineSpacingExtra i lineSpacingMultiplier w TextView
  • Optymalny leading dla interfejsów mobilnych: 120-150% rozmiaru czcionki
  • Wpływa na accessibility: niewystarczający odstęp między wierszami zmniejsza czytelność tekstu

Czym jest leading i odstęp między wierszami

Leading (wymawiane „lending”) — to pionowa odległość między liniami bazowymi sąsiednich wierszy w typografii. Linia bazowa to niewidzialna linia, na której znajdują się znaki tekstu. Im większy leading, tym swobodniej wiersze są rozmieszczone względem siebie. W typografii cyfrowej leading często nazywa się odstępem między wierszami lub wysokością wiersza.

Historycznie termin pojawił się w epoce typografii metalowej: zecerzy wkładali cienkie ołowiane paski między wiersze, aby zwiększyć odstęp. We współczesnych czcionkach leading określany jest jako stosunek do rozmiaru czcionki. Wartość domyślna wynosi 1.2 (120% rozmiaru czcionki), ale w przypadku długich tekstów i interfejsów mobilnych zaleca się większe wartości. Według wytycznych Material Design Typography optymalna wysokość wiersza dla interfejsów web i mobilnych wynosi 1.4-1.5 dla tekstu głównego.

Różnica między leading a line spacing: leading to pełna odległość od linii bazowej do linii bazowej, line spacing to odległość między dolną granicą jednego wiersza a górną granicą następnego. W większości mobilnych API (iOS NSParagraphStyle, Android TextView) używany jest właśnie line spacing jako dodatkowy odstęp na wierzchu naturalnej wysokości wiersza. Należy to uwzględnić przy obliczaniu całkowitego odstępu między wierszami.

Optymalne wartości leading dla interfejsów mobilnych

Dobór optymalnego leading zależy od kilku czynników: rozmiaru czcionki, długości wiersza, kontekstu użycia i odbiorców. Dla interfejsów mobilnych z typową długością wiersza 40-60 znaków zaleca się leading od 1.4 do 1.6 rozmiaru czcionki. Krótkie wiersze (etykiety, przyciski) mogą używać mniejszego leading — 1.0-1.2. Długie teksty (artykuły, opisy) — większy leading, do 1.8 dla maksymalnej czytelności.

Dane eksperymentalne: badanie Wichita State University Software Usability Laboratory wykazało, że leading 1.5 zwiększa prędkość czytania o 7.5% w porównaniu z leading 1.0 przy tej samej szerokości wiersza. Dla użytkowników z dysleksją optymalny leading jest jeszcze wyższy — do 1.8. Dane te są potwierdzane przez wytyczne WCAG 2.2, które wymagają możliwości zwiększenia odstępu między wierszami do 1.5 bez utraty treści.

Wpływ kroju pisma: czcionki z wysoką x-height (względna wysokość małych liter) wymagają większego leading niż czcionki z niską x-height. Na przykład Helvetica (wysoka x-height) zaleca leading 1.5 dla tekstu głównego, a Didot (niska x-height) — 1.3. Wiąże się to z tym, że przy wysokiej x-height wiersze wizualnie łączą się szybciej przy tym samym odstępie między wierszami.

KontekstZalecany leadingPrzykład iOS
Nagłówki (24-36pt)1.0 — 1.2lineHeightMultiple: 1.1
Tekst główny (14-18pt)1.4 — 1.6lineHeightMultiple: 1.5
Drobny tekst (10-13pt)1.3 — 1.5lineHeightMultiple: 1.4
Artykuły i długie formy1.5 — 1.8lineHeightMultiple: 1.6
Accessibility (dysleksja)1.6 — 2.0lineHeightMultiple: 1.8

Implementacja leading w iOS przez NSParagraphStyle

Na iOS odstęp między wierszami jest zarządzany przez klasę NSMutableParagraphStyle, która zawiera dwie kluczowe właściwości: lineSpacing (dodatkowy odstęp między wierszami w punktach) i lineHeightMultiple (mnożnik wysokości wiersza). Właściwości te działają wspólnie: całkowita wysokość wiersza jest obliczana jako naturalna wysokość czcionki pomnożona przez lineHeightMultiple plus lineSpacing.

swift
let paragraphStyle = NSMutableParagraphStyle()

// Metoda 1: mnożnik wysokości wiersza
paragraphStyle.lineHeightMultiple = 1.5

// Metoda 2: dodatkowy odstęp między wierszami
paragraphStyle.lineSpacing = 4.0

// Zastosuj przez NSAttributedString
let attributedText = NSAttributedString(
    string: "Text with custom line spacing",
    attributes: [
        .paragraphStyle: paragraphStyle
    ]
)

lineHeightMultiple — preferowany sposób, ponieważ automatycznie skaluje się przy zmianie rozmiaru czcionki. lineSpacing jest określany w absolutnych punktach i nie skaluje się, co może prowadzić do niezgodności przy użyciu Dynamic Type. Według Apple Text Programming Guide, dla interfejsów zgodnych z accessibility używaj lineHeightMultiple w kombinacji z UIFontMetrics.

SwiftUI udostępnia modyfikator .lineSpacing() dla Text i VStack. W przeciwieństwie do UIKit, w SwiftUI odstęp między wierszami jest określany w punktach i nie ma wbudowanego mnożnika. Aby zaimplementować mnożnik, programista musi ręcznie obliczyć odstęp między wierszami na podstawie rozmiaru czcionki. Ograniczenie: SwiftUI nie obsługuje bezpośrednio lineHeightMultiple — używaj .lineSpacing(CGFloat) z obliczoną wartością.

swift
struct LeadingTextView: View {
    let fontSize: CGFloat = 17

    var lineSpacing: CGFloat {
        fontSize * 0.5 // 50% rozmiaru czcionki
    }

    var body: some View {
        Text("Odstęp między wierszami")
        Text("Mnożnik 1.5")
            .lineSpacing(lineSpacing)
            .font(.system(size: fontSize))
    }
}

Konfiguracja odstępu między wierszami na Android

Na Android odstęp między wierszami jest określany przez dwa atrybuty TextView: lineSpacingExtra (dodatkowy odstęp w px) i lineSpacingMultiplier (mnożnik wysokości wiersza, domyślnie 1.0). Analogicznie do iOS, mnożnik skaluje się przy zmianie rozmiaru czcionki, a extra to wartość absolutna. Dla interfejsów zgodnych z accessibility preferowane jest używanie mnożnika.

groovy
// W układzie XML
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Text with line spacing"
    android:lineSpacingExtra="4dp"
    android:lineSpacingMultiplier="1.5"
    android:textSize="16sp" />

// Programowo w Kotlin
val textView = findViewById<TextView>(R.id.contentText)
textView.setLineSpacing(
    TypedValue.applyDimension(
        TypedValue.COMPLEX_UNIT_DIP,
        4f,
        resources.displayMetrics
    ),
    1.5f
)

Compose — nowoczesny framework UI dla Androida — używa parametru lineHeight w modyfikatorze TextStyle. W przeciwieństwie do podejścia XML, w Compose lineHeight jest określany jako pełna wysokość wiersza w sp (domyślnie = fontSize * 1.2). Aby ustawić mnożnik, programista podaje lineHeight w procentach od fontSize: Przykład: TextStyle(fontSize = 16.sp, lineHeight = 24.sp) daje mnożnik 1.5.

Ograniczenie: na Android przed API 28 lineSpacingExtra i lineSpacingMultiplier działają nieprawidłowo z niektórymi czcionkami, szczególnie niestandardowymi (TTF/OTF). Zaleca się testowanie na rzeczywistych urządzeniach i uwzględnienie, że systemTextView domyślnie używa lineSpacingMultiplier 1.0 — bez dodatkowego odstępu. W przypadku długich tekstów w ScrollView należy jawnie ustawić odstęp między wierszami.

Odstęp między wierszami w programowaniu web przez CSS line-height

W sieci odstęp między wierszami jest określany przez właściwość CSS line-height, która może być liczbą (mnożnikiem), wartością procentową, jednostkami długości (px, em) lub słowem kluczowym normal. Mnożnik liczbowy jest preferowanym sposobem, ponieważ jest dziedziczony i skaluje się względem rozmiaru czcionki elementów potomnych. Wartość normal odpowiada około 1.2 dla większości czcionek.

css
/* Numerical multiplier (recommended) */
body {
    font-size: 16px;
    line-height: 1.5;
}

/* Percentage value */
.article-content {
    line-height: 150%;
}

/* Fixed value (does not scale) */
.small-text {
    font-size: 12px;
    line-height: 18px;
}

Mnożnik liczbowy vs em: line-height: 1.5 i line-height: 1.5em to różne rzeczy. Mnożnik liczbowy jest dziedziczony jako computed value i obliczany na nowo dla każdego elementu potomnego na podstawie jego font-size. em jest dziedziczony jako fixed computed value na podstawie font-size rodzica. To krytyczna różnica: przy zagnieżdżeniu font-size: 20px wewnątrz font-size: 16px, line-height: 1.5 da 30px, a line-height: 1.5em — 24px (od rodzica). Zalecenie: zawsze używaj mnożnika liczbowego.

Porównanie ustawień leading na iOS, Android i w sieci

Pomimo różnych API, zasada konfiguracji odstępu między wierszami jest taka sama na wszystkich platformach. Mnożnik (multiplier) skaluje się przy zmianie rozmiaru czcionki i jest przyjazny dla accessibility. Wartość absolutna (spacing) nie skaluje się i może prowadzić do problemów przy użyciu Dynamic Type lub ustawień dużego tekstu.

Strategia cross-platform: określaj lineHeight w systemie projektowym jako mnożnik od fontSize. Na przykład w tokenach projektowych: line-height-body = 1.5, line-height-heading = 1.1. Każda platforma implementuje ten mnożnik za pomocą swojego API: iOS — lineHeightMultiple, Android — lineSpacingMultiplier, Web — line-height: 1.5. Gwarantuje to identyczny wynik wizualny na wszystkich platformach.

PlatformaAPI mnożnikaAPI odstępu
iOS UIKitNSParagraphStyle.lineHeightMultipleNSParagraphStyle.lineSpacing
iOS SwiftUI.lineSpacing (ręczne obliczenie).lineSpacing(CGFloat)
Android XMLandroid:lineSpacingMultiplierandroid:lineSpacingExtra
Android ComposeTextStyle.lineHeight (w sp)TextStyle.lineHeight
Web CSSline-height: {liczba}line-height: {px/em}

Ważny niuans: na iOS lineHeightMultiple jest stosowany do pełnej wysokości wiersza (w tym ascender + descender czcionki), a na Android lineSpacingMultiplier — do wysokości wiersza obliczonej przez silnik renderujący Minikin. W praktyce prowadzi to do niewielkich różnic w wizualnym leading przy tej samej wartości mnożnika. Dla pixel-perfect zgodności używaj wartości absolutnych z korektą dla platformy.

Często zadawane pytania

Czym różni się leading od line spacing?

Leading — to pełna odległość od linii bazowej jednego wiersza do linii bazowej następnego. Line spacing — to dodatkowy odstęp między wierszami, który dodaje się do naturalnej wysokości wiersza. W iOS lineSpacing to właśnie dodatkowy odstęp, a nie pełna wysokość.

Jaki leading stosować dla accessibility?

Aby spełnić WCAG 2.2, używaj line-height 1.5 dla tekstu głównego. Użytkownicy z dysleksją i zaburzeniami wzroku lepiej czytają tekst z leading od 1.6 do 1.8. Upewnij się, że użytkownik może zwiększyć odstęp między wierszami bez utraty treści.

Dlaczego leading w SwiftUI różni się od UIKit?

SwiftUI używa własnego silnika renderującego, gdzie lineSpacing to odstęp między wierszami w punktach, bez wbudowanego mnożnika. W UIKit lineHeightMultiple skaluje się z rozmiarem czcionki. Dla jednolitości w SwiftUI obliczaj lineSpacing jako fontSize * 0.5 dla mnożnika 1.5.

Czy leading wpływa na wydajność przewijania?

Bezpośredniego wpływu na FPS nie ma, ale większy leading zwiększa wysokość treści, a tym samym liczbę komórek w UICollectionView/RecyclerView, co pośrednio wpływa na wydajność. Dla list z tysiącami elementów optymalizuj leading w systemie projektowym.

Jak obliczyć leading dla niestandardowej czcionki?

Użyj wzoru: line-height = font-size + (font-size * multiplier). Dla czcionki 16pt z mnożnikiem 1.5: 16 + (16 * 0.5) = 24pt. Sprawdź wizualnie na rzeczywistym tekście — różne kroje pisma wymagają indywidualnej konfiguracji.

Podsumowanie

  • Leading — odległość między liniami bazowymi wierszy, określająca czytelność tekstu
  • Optymalny odstęp między wierszami dla interfejsów mobilnych: 1.4 — 1.6 rozmiaru czcionki
  • Na iOS konfigurowany przez lineHeightMultiple w NSMutableParagraphStyle
  • Na Android zarządzany przez lineSpacingMultiplier w TextView lub lineHeight w Compose
  • W sieci używany jest line-height z mnożnikiem liczbowym (nie em, nie px)
  • Mnożnik — preferowany sposób: skaluje się przy Dynamic Type i ustawieniach accessibility
  • Dla accessibility używaj leading 1.5 i więcej, daj użytkownikowi możliwość zwiększenia odstępu

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również