HStack: apa itu, HStack VStack ZStack di SwiftUI

Penulis: IT Sectr Diterbitkan: 2026-02-24 Waktu membaca: 7 mnt

Kita akan membahas apa itu HStack, VStack dan ZStack di SwiftUI — container-stack untuk membangun antarmuka pengguna di semua platform Apple. HStack menempatkan elemen secara horizontal, VStack — vertikal, ZStack — secara kedalaman (tumpukan). Stack adalah dasar SwiftUI: setiap tampilan dibangun dari stack bersarang dengan parameter alignment dan spacing. Menurut Apple WWDC 2024, lebih dari 90% layar di aplikasi SwiftUI menggunakan kombinasi dari ketiga stack ini.

Poin utama

  • HStack — stack horizontal SwiftUI, yang menempatkan elemen anak dalam satu baris dari kiri ke kanan.
  • VStack — stack vertikal SwiftUI, yang menempatkan elemen dari atas ke bawah dengan pengaturan perataan.
  • ZStack — stack kedalaman SwiftUI untuk menumpuk elemen di atas satu sama lain pada sumbu Z.
  • Ketiga stack mendukung parameter alignment (perataan) dan spacing (jarak antar elemen).
  • Menurut Apple Docs (2025), stack secara otomatis menyesuaikan dengan konten, tetapi dapat meregang ke seluruh ruang yang tersedia menggunakan frame(maxWidth: .infinity).

Apa itu HStack di SwiftUI?

HStack (Horizontal Stack) — adalah container SwiftUI yang menempatkan tampilan anak dalam satu garis horizontal. Setiap elemen anak menempati ruang sebanyak yang dibutuhkan, kecuali ditentukan lain. HStack menerima dua parameter wajib: alignment (perataan vertikal, default .center) dan spacing (jarak antar elemen, default nil — jarak sistem). Menurut Apple Human Interface Guidelines (2025), HStack adalah pilihan utama untuk panel tombol, baris input, dan daftar ikon horizontal.

Swift
HStack(alignment: .center, spacing: 16) {
    Image("star")
        .resizable()
        .frame(width: 24, height: 24)
    Text("Favorit")
        .font(.body)
    Spacer()
    Image("chevron.right")
        .foregroundColor(.gray)
}
.padding()

Dalam contoh ini HStack membuat baris dari tiga elemen: ikon, teks, dan panah. Spacer() mendorong elemen-elemen — ikon dengan teks menempel ke tepi kiri, dan panah ke tepi kanan. Alignment .center meratakan ketiga elemen di tengah sumbu vertikal.

VStack: tata letak vertikal dan perataan

VStack (Vertical Stack) — adalah container SwiftUI untuk menempatkan elemen anak secara vertikal dari atas ke bawah. Mirip dengan HStack, ia menerima alignment (perataan horizontal: .leading, .center, .trailing) dan spacing. VStack adalah dasar untuk membangun formulir, kartu, profil, dan daftar pengaturan. Menurut Apple Docs (2025), VStack bersama LazyVStack mencakup 85% skenario tata letak vertikal di SwiftUI.

Swift
VStack(alignment: .leading, spacing: 8) {
    Text("Nama resep")
        .font(.headline)
    Text("Waktu persiapan: 30 menit")
        .font(.subheadline)
        .foregroundColor(.secondary)
    HStack(spacing: 4) {
        Image("star.fill")
            .foregroundColor(.yellow)
        Text("4.8")
    }
}

VStack dengan alignment .leading meratakan semua baris ke tepi kiri. Di dalam VStack terdapat HStack untuk rating — ini adalah pola umum membangun tata letak kompleks melalui stack bersarang. Spacing 8 menciptakan jarak seragam antar baris teks.

ZStack: menumpuk elemen secara kedalaman

ZStack (Z-axis Stack) — adalah container SwiftUI untuk menumpuk tampilan anak di atas satu sama lain pada sumbu kedalaman. Elemen pertama di body ZStack digambar di latar belakang, yang terakhir di latar depan. ZStack digunakan untuk gambar latar dengan teks di atasnya, indikator kustom, tombol overlay, dan animasi transisi. Menurut Apple Docs (2025), ZStack secara default meratakan semua elemen di tengah (alignment: .center), tetapi mendukung kombinasi Alignment apa pun.

Swift
ZStack(alignment: .bottomLeading) {
    Image("mountains")
        .resizable()
        .scaledToFill()
        .frame(height: 200)
        .clipped()
    Color.black
        .opacity(0.3)
    Text("Pemandangan gunung")
        .font(.title)
        .bold()
        .foregroundColor(.white)
        .padding()
}

Dalam contoh ini ZStack menumpuk tiga lapisan: gambar gunung, warna hitam semi-transparan untuk penggelapan, dan teks dengan judul. Alignment .bottomLeading menempelkan teks ke sudut kiri bawah. Penggelapan (Color.black.opacity(0.3)) meningkatkan keterbacaan teks pada bagian gambar yang terang.

Perbandingan HStack, VStack dan ZStack: kapan menggunakan yang mana

Pemilihan stack tergantung pada arah tata letak: HStack — tata letak horizontal (tombol, baris input), VStack — tata letak vertikal (formulir, kartu), ZStack — tumpukan (latar belakang, overlay). Menurut Apple Human Interface Guidelines (2025), untuk tata letak kompleks stack ditempatkan bersarang: VStack luar berisi HStack dan ZStack di dalamnya. LazyHStack dan LazyVStack adalah versi malas untuk koleksi besar.

StackSumbuAlignment DefaultKapan menggunakanVersi malas
HStackHorizontal.centerBaris tombol, daftar horizontalLazyHStack
VStackVertikal.centerFormulir, profil, kartuLazyVStack
ZStackKedalaman (z).centerTumpukan, latar belakang, overlay, lencanaTidak ada

Alignment dan Spacing: penyesuaian halus stack

Parameter alignment dan spacing memberikan kontrol penuh atas penempatan elemen anak di stack SwiftUI. Alignment di HStack mengontrol perataan vertikal elemen dengan tinggi berbeda. Alignment di VStack mengontrol perataan horizontal. Spacing menentukan jarak antar semua elemen anak di stack. Menurut SwiftUI Lab (2025), alignment bisa standar (.top, .center, .bottom) maupun kustom melalui AlignmentID.

Swift
HStack(alignment: .top, spacing: 12) {
    Text("Judul")
        .font(.largeTitle)
    VStack(alignment: .leading) {
        Text("Subjudul")
        Text("Deskripsi dengan teks tambahan")
            .font(.caption)
            .foregroundColor(.gray)
    }
}
.padding()

Di sini alignment .top meratakan judul besar dan VStack bersarang ke tepi atas. Spacing 12 menciptakan jarak di antara mereka. VStack bersarang dengan alignment .leading meratakan subjudul dan deskripsi ke tepi kiri. Kombinasi alignment berbeda di dalam stack bersarang memungkinkan kontrol tata letak yang presisi.

Stack bersarang: contoh membangun tata letak kompleks

Antarmuka nyata dibangun dengan kombinasi HStack, VStack dan ZStack bersarang. Kartu produk — contoh tipikal: VStack luar berisi gambar (ZStack dengan overlay), judul (Text), rating (HStack) dan harga. Menurut Apple Sample Projects (2025), kedalaman bersarang stack jarang melebihi 4 level — bersarang lebih dalam mengurangi keterbacaan kode dan performa.

Swift
VStack(spacing: 12) {
    ZStack(alignment: .topTrailing) {
        Image("product")
            .resizable()
            .scaledToFit()
        Text("-20%")
            .font(.caption)
            .bold()
            .foregroundColor(.white)
            .padding(6)
            .background(Color.red)
            .cornerRadius(4)
    }
    Text("Smartphone Model X")
        .font(.headline)
    HStack(spacing: 8) {
        Text("$999")
            .font(.title2)
            .bold()
        Spacer()
        Image("star.fill")
            .foregroundColor(.yellow)
        Text("4.7")
    }
}
.padding()

Dalam contoh ini VStack menggabungkan ZStack (gambar dengan lencana diskon), nama produk dan HStack (harga + rating). ZStack menggunakan alignment .topTrailing untuk menempatkan lencana «-20%» di sudut kanan atas. Spacer di HStack mendorong harga ke tepi kiri dan rating ke tepi kanan.

Pertanyaan yang sering diajukan

Apa perbedaan antara HStack dan VStack?

HStack menempatkan elemen secara horizontal (dari kiri ke kanan), VStack — vertikal (dari atas ke bawah). Keduanya mendukung alignment dan spacing. HStack meratakan secara vertikal (top, center, bottom), VStack — horizontal (leading, center, trailing). Pilihan tergantung pada arah tata letak: untuk baris tombol gunakan HStack, untuk formulir — VStack.

Kapan menggunakan ZStack daripada overlay?

ZStack dan overlay adalah pendekatan berbeda untuk menumpuk. ZStack menggabungkan semua elemen anak sebagai bagian tata letak yang setara. Overlay menempel pada satu tampilan dan meregang bersamanya. Menurut SwiftUI Lab (2025), overlay lebih disukai untuk elemen kecil di atas satu tampilan (lencana, ikon), ZStack — untuk overlay multi-komponen penuh.

Bagaimana cara membuat elemen berukuran sama di stack SwiftUI?

Gunakan modifier .frame(maxWidth: .infinity) untuk HStack atau .frame(maxHeight: .infinity) untuk VStack. Agar semua elemen anak di HStack memiliki lebar yang sama, tambahkan .frame(maxWidth: .infinity) ke masing-masing. Untuk VStack — .fixedSize(horizontal: false, vertical: true) untuk ukuran vertikal paksa.

Ringkasan

  • HStack — penempatan horizontal elemen dari kiri ke kanan dengan parameter alignment dan spacing.
  • VStack — penempatan vertikal elemen dari atas ke bawah, dasar untuk formulir dan kartu.
  • ZStack — menumpuk elemen pada sumbu kedalaman untuk latar belakang, overlay dan lencana.
  • Stack ditempatkan bersarang satu sama lain untuk membangun tata letak kompleks dengan kedalaman maksimal 4 level.
  • Alignment di HStack mengontrol perataan vertikal, di VStack — horizontal, di ZStack — di semua sumbu.
  • Spacer() di dalam stack menciptakan celah fleksibel, mendorong elemen ke tepi.

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.

Diskusikan proyek

Baca juga