Leading (leading) — adalah jarak antara garis dasar baris teks yang berdekatan, yang secara langsung menentukan kenyamanan membaca. Istilah ini berasal dari huruf tipografi fisik: di antara baris ditempatkan strip timah (lead strips) untuk meningkatkan jarak. Dalam pengembangan mobile modern, leading diimplementasikan melalui lineSpacing dan lineHeightMultiple di iOS di NSAttributedString dan melalui lineSpacing di Android di TextView. Menurut Dokumentasi Apple NSMutableParagraphStyle, spasi antar baris diatur dalam poin dan dapat dikombinasikan dengan pengali tinggi baris.
Utama
Leading (diucapkan „lending”) — adalah jarak vertikal antara garis dasar baris yang berdekatan dalam tipografi. Garis dasar — garis tak terlihat di mana karakter teks ditempatkan. Semakin besar leading, semakin bebas baris ditempatkan relatif satu sama lain. Dalam tipografi digital, leading sering disebut spasi antar baris atau tinggi baris.
Secara historis, istilah ini muncul di era tipografi logam: penyusun huruf menempatkan strip timah tipis di antara baris untuk meningkatkan jarak. Dalam font modern, leading ditentukan sebagai rasio terhadap ukuran font. Nilai default sistem adalah 1.2 (120% dari ukuran font), tetapi untuk teks panjang dan antarmuka mobile nilai yang lebih besar direkomendasikan. Menurut Pedoman Tipografi Material Design, tinggi baris optimal untuk antarmuka web dan mobile adalah 1.4-1.5 untuk teks utama.
Perbedaan antara leading dan line spacing: leading — jarak penuh dari garis dasar ke garis dasar, line spacing — jarak antara batas bawah satu baris dan batas atas baris berikutnya. Di sebagian besar API mobile (iOS NSParagraphStyle, Android TextView) yang digunakan adalah line spacing sebagai spasi tambahan di atas tinggi alami baris. Ini penting untuk dipertimbangkan saat menghitung total spasi antar baris.
Pemilihan leading optimal tergantung pada beberapa faktor: ukuran font, panjang baris, konteks penggunaan, dan audiens. Untuk antarmuka mobile dengan panjang baris tipikal 40-60 karakter, leading 1.4 hingga 1.6 dari ukuran font direkomendasikan. Baris pendek (label, tombol) dapat menggunakan leading yang lebih kecil — 1.0-1.2. Teks panjang (artikel, deskripsi) — leading lebih besar, hingga 1.8 untuk keterbacaan maksimal.
Data eksperimental: penelitian Wichita State University Software Usability Laboratory menunjukkan bahwa leading 1.5 meningkatkan kecepatan membaca sebesar 7.5% dibandingkan dengan leading 1.0 pada lebar baris yang sama. Untuk pengguna dengan disleksia, leading optimal bahkan lebih tinggi — hingga 1.8. Data ini dikonfirmasi oleh rekomendasi WCAG 2.2, yang mengharuskan kemungkinan peningkatan spasi antar baris hingga 1.5 tanpa kehilangan konten.
Pengaruh jenis huruf: font dengan x-height tinggi (tinggi relatif huruf kecil) membutuhkan leading yang lebih besar daripada font dengan x-height rendah. Misalnya, Helvetica (x-height tinggi) merekomendasikan leading 1.5 untuk body text, sedangkan Didot (x-height rendah) — 1.3. Ini karena pada x-height tinggi, baris secara visual lebih cepat menyatu pada spasi antar baris yang sama.
| Konteks | Leading yang direkomendasikan | Contoh iOS |
|---|---|---|
| Judul (24-36pt) | 1.0 — 1.2 | lineHeightMultiple: 1.1 |
| Teks utama (14-18pt) | 1.4 — 1.6 | lineHeightMultiple: 1.5 |
| Teks kecil (10-13pt) | 1.3 — 1.5 | lineHeightMultiple: 1.4 |
| Artikel dan konten panjang | 1.5 — 1.8 | lineHeightMultiple: 1.6 |
| Accessibility (disleksia) | 1.6 — 2.0 | lineHeightMultiple: 1.8 |
Di iOS, spasi antar baris dikelola melalui kelas NSMutableParagraphStyle, yang berisi dua properti kunci: lineSpacing (spasi tambahan antar baris dalam poin) dan lineHeightMultiple (pengali tinggi baris). Properti ini bekerja bersama: tinggi total baris dihitung sebagai tinggi alami font dikalikan dengan lineHeightMultiple ditambah lineSpacing.
let paragraphStyle = NSMutableParagraphStyle()
// Metode 1: pengali tinggi baris
paragraphStyle.lineHeightMultiple = 1.5
// Metode 2: spasi tambahan antar baris
paragraphStyle.lineSpacing = 4.0
// Terapkan melalui NSAttributedString
let attributedText = NSAttributedString(
string: "Text with custom line spacing",
attributes: [
.paragraphStyle: paragraphStyle
]
)
lineHeightMultiple — metode yang lebih disukai, karena secara otomatis berskala saat ukuran font berubah. lineSpacing diatur dalam poin absolut dan tidak berskala, yang dapat menyebabkan ketidaksesuaian saat menggunakan Dynamic Type. Menurut Apple Text Programming Guide, untuk antarmuka yang kompatibel dengan accessibility, gunakan lineHeightMultiple dalam kombinasi dengan UIFontMetrics.
SwiftUI menyediakan pengubah .lineSpacing() untuk Text dan VStack. Berbeda dengan UIKit, di SwiftUI spasi antar baris diatur dalam titik dan tidak memiliki pengali bawaan. Untuk mengimplementasikan pengali, pengembang perlu menghitung spasi antar baris secara manual berdasarkan ukuran font. Keterbatasan: SwiftUI tidak mendukung lineHeightMultiple secara langsung — gunakan .lineSpacing(CGFloat) dengan nilai yang dihitung.
struct LeadingTextView: View {
let fontSize: CGFloat = 17
var lineSpacing: CGFloat {
fontSize * 0.5 // 50% dari ukuran font
}
var body: some View {
Text("Spasi baris")
Text("Pengali 1.5")
.lineSpacing(lineSpacing)
.font(.system(size: fontSize))
}
}
Di Android, spasi antar baris diatur melalui dua atribut TextView: lineSpacingExtra (spasi tambahan dalam px) dan lineSpacingMultiplier (pengali tinggi baris, default 1.0). Mirip dengan iOS, pengali berskala saat ukuran font berubah, sedangkan extra adalah nilai absolut. Untuk antarmuka yang kompatibel dengan accessibility, penggunaan pengali lebih disukai.
// Dalam tata letak 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" />
// Secara terprogram di Kotlin
val textView = findViewById<TextView>(R.id.contentText)
textView.setLineSpacing(
TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
4f,
resources.displayMetrics
),
1.5f
)
Compose — framework UI Android modern — menggunakan parameter lineHeight dalam pengubah TextStyle. Berbeda dengan pendekatan XML, di Compose lineHeight diatur sebagai tinggi baris penuh dalam sp (default = fontSize * 1.2). Untuk mengatur pengali, pengembang menentukan lineHeight sebagai persentase dari fontSize: Contoh: TextStyle(fontSize = 16.sp, lineHeight = 24.sp) menghasilkan pengali 1.5.
Keterbatasan: di Android sebelum API 28, lineSpacingExtra dan lineSpacingMultiplier tidak berfungsi dengan benar dengan beberapa font, terutama font kustom (TTF/OTF). Disarankan untuk menguji pada perangkat nyata dan mempertimbangkan bahwa systemTextView secara default menggunakan lineSpacingMultiplier 1.0 — tanpa spasi tambahan. Untuk teks panjang di ScrollView, pastikan untuk mengatur spasi antar baris secara eksplisit.
Di web, spasi antar baris diatur oleh properti CSS line-height, yang dapat berupa angka (pengali), nilai persentase, satuan panjang (px, em), atau kata kunci normal. Pengali numerik — metode yang lebih disukai, karena diwariskan dan berskala relatif terhadap ukuran font elemen turunan. Nilai normal setara dengan sekitar 1.2 untuk sebagian besar font.
/* 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;
}
Pengali numerik vs em: line-height: 1.5 dan line-height: 1.5em adalah hal yang berbeda. Pengali numerik diwariskan sebagai nilai terhitung dan dihitung ulang untuk setiap elemen turunan berdasarkan font-size-nya. Em diwariskan sebagai nilai terhitung tetap berdasarkan font-size induk. Ini adalah perbedaan kritis: ketika font-size: 20px ditempatkan di dalam font-size: 16px, line-height: 1.5 menghasilkan 30px, sedangkan line-height: 1.5em — 24px (dari induk). Rekomendasi: selalu gunakan pengali numerik.
Meskipun API berbeda, prinsip konfigurasi spasi antar baris sama di semua platform. Pengali (multiplier) berskala saat ukuran font berubah dan ramah terhadap accessibility. Nilai absolut (spacing) tidak berskala dan dapat menyebabkan masalah saat menggunakan Dynamic Type atau pengaturan teks besar.
Strategi lintas platform: tetapkan lineHeight dalam sistem desain sebagai pengali dari fontSize. Misalnya, dalam token desain: line-height-body = 1.5, line-height-heading = 1.1. Setiap platform mengimplementasikan pengali ini dengan API-nya sendiri: iOS — lineHeightMultiple, Android — lineSpacingMultiplier, Web — line-height: 1.5. Ini menjamin hasil visual yang sama di semua platform.
| Platform | API Pengali | API Spasi |
|---|---|---|
| iOS UIKit | NSParagraphStyle.lineHeightMultiple | NSParagraphStyle.lineSpacing |
| iOS SwiftUI | .lineSpacing (perhitungan manual) | .lineSpacing(CGFloat) |
| Android XML | android:lineSpacingMultiplier | android:lineSpacingExtra |
| Android Compose | TextStyle.lineHeight (dalam sp) | TextStyle.lineHeight |
| Web CSS | line-height: {angka} | line-height: {px/em} |
Nuansa penting: di iOS, lineHeightMultiple diterapkan pada tinggi baris penuh (termasuk ascender + descender font), sedangkan di Android, lineSpacingMultiplier — pada tinggi baris yang dihitung oleh mesin render Minikin. Dalam praktiknya, ini menyebabkan perbedaan kecil dalam leading visual pada nilai pengali yang sama. Untuk kesesuaian pixel-perfect, gunakan nilai absolut dengan penyesuaian platform.
Pertanyaan yang Sering Diajukan
Leading — jarak penuh dari garis dasar satu baris ke garis dasar baris berikutnya. Line spacing — spasi tambahan antar baris yang ditambahkan ke tinggi alami baris. Di iOS, lineSpacing adalah spasi tambahan, bukan tinggi penuh.
Untuk memenuhi WCAG 2.2, gunakan line-height 1.5 untuk teks utama. Pengguna dengan disleksia dan gangguan penglihatan membaca teks dengan leading 1.6 hingga 1.8 dengan lebih baik. Pastikan pengguna dapat meningkatkan spasi antar baris tanpa kehilangan konten.
SwiftUI menggunakan mesin render sendiri, di mana lineSpacing adalah spasi antar baris dalam titik tanpa pengali bawaan. Di UIKit, lineHeightMultiple berskala dengan ukuran font. Untuk keseragaman di SwiftUI, hitung lineSpacing sebagai fontSize * 0.5 untuk pengali 1.5.
Tidak ada pengaruh langsung pada FPS, tetapi leading yang lebih besar meningkatkan tinggi konten dan, oleh karena itu, jumlah sel di UICollectionView/RecyclerView, yang secara tidak langsung mempengaruhi performa. Untuk daftar dengan ribuan elemen, optimalkan leading dalam sistem desain.
Gunakan rumus: line-height = font-size + (font-size * multiplier). Untuk font 16pt dengan pengali 1.5: 16 + (16 * 0.5) = 24pt. Periksa secara visual pada teks nyata — jenis huruf yang berbeda memerlukan penyesuaian individual.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga