HStack: nedir, SwiftUI'da HStack VStack ZStack

Yazar: IT Sectr Yayınlanma: 2026-02-24 Okuma süresi: 7 dk

SwiftUI'da HStack, VStack ve ZStack'in ne olduğunu keşfedelim — tüm Apple platformlarında kullanıcı arayüzleri oluşturmak için konteyner stack'ler. HStack öğeleri yatay olarak, VStack dikey olarak ve ZStack derinlikte (katman) düzenler. Stack'ler SwiftUI'nin temelidir: herhangi bir görünüm, alignment ve spacing parametreleriyle iç içe stack'lerden oluşturulur. Apple WWDC 2024'e göre, SwiftUI uygulamalarındaki ekranların %90'ından fazlası bu üç stack'in bir kombinasyonunu kullanır.

Önemli Noktalar

  • HStack — alt öğeleri soldan sağa bir satırda düzenleyen yatay bir SwiftUI stack'idir.
  • VStack — öğeleri yukarıdan aşağıya hizalama ayarlarıyla düzenleyen dikey bir SwiftUI stack'idir.
  • ZStack — öğeleri z-ekseni boyunca üst üste katmanlayan bir derinlik SwiftUI stack'idir.
  • Her üç stack de alignment ve spacing parametrelerini destekler.
  • Apple Docs'a (2025) göre, stack'ler içeriğe otomatik olarak uyum sağlar ancak frame(maxWidth: .infinity) ile mevcut alanı dolduracak şekilde genişleyebilir.

SwiftUI'da HStack Nedir?

HStack (Horizontal Stack), alt görünümleri yatay bir çizgide düzenleyen bir SwiftUI konteyneridir. Her alt öğe, aksi belirtilmedikçe ihtiyaç duyduğu kadar yer kaplar. HStack iki zorunlu parametre kabul eder: alignment (dikey hizalama, varsayılan .center) ve spacing (öğeler arası mesafe, varsayılan nil — sistem aralığı). Apple Human Interface Guidelines'a (2025) göre HStack, düğme çubukları, giriş satırları ve yatay simge listeleri için tercih edilen seçimdir.

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

Bu örnekte, HStack üç öğeden oluşan bir satır oluşturur: bir simge, metin ve bir ok. Spacer() öğeleri birbirinden ayırır — simge ve metin sol kenara, ok ise sağ kenara yapışır. Alignment .center üç öğeyi de dikey merkez ekseni boyunca hizalar.

VStack: dikey düzen ve hizalama

VStack (Vertical Stack), alt öğeleri yukarıdan aşağıya dikey olarak düzenleyen bir SwiftUI konteyneridir. HStack'e benzer şekilde, alignment (yatay hizalama: .leading, .center, .trailing) ve spacing kabul eder. VStack, formlar, kartlar, profiller ve ayar listeleri oluşturmanın temelidir. Apple Docs'a (2025) göre VStack, LazyVStack ile birlikte SwiftUI'daki dikey düzen senaryolarının %85'ini kapsar.

Swift
VStack(alignment: .leading, spacing: 8) {
    Text("Tarif adı")
        .font(.headline)
    Text("Hazırlama süresi: 30 dk")
        .font(.subheadline)
        .foregroundColor(.secondary)
    HStack(spacing: 4) {
        Image("star.fill")
            .foregroundColor(.yellow)
        Text("4.8")
    }
}

alignment .leading ile VStack tüm satırları sol kenara hizalar. VStack'in içinde, derecelendirme için bir HStack iç içe geçmiştir — bu, iç içe stack'ler aracılığıyla karmaşık düzenler oluşturmanın tipik bir modelidir. Spacing 8, metin satırları arasında eşit boşluk oluşturur.

ZStack: öğeleri derinliğe göre katmanlama

ZStack (Z-ekseni Stack), alt görünümleri derinlik ekseni boyunca üst üste katmanlayan bir SwiftUI konteyneridir. ZStack gövdesindeki ilk öğe arka planda, sonuncusu ise ön planda çizilir. ZStack, üzerinde metin bulunan arka plan resimleri, özel göstergeler, katman düğmeleri ve geçiş animasyonları için kullanılır. Apple Docs'a (2025) göre ZStack varsayılan olarak tüm öğeleri merkeze hizalar (alignment: .center) ancak herhangi bir Alignment kombinasyonunu destekler.

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

Bu örnekte, ZStack üç katmanı üst üste koyar: bir dağ resmi, karartmak için yarı saydam siyah bir renk ve bir başlık metni. Alignment .bottomLeading metni sol alt köşeye sabitler. Karartma (Color.black.opacity(0.3)), resmin parlak alanlarında metin okunabilirliğini artırır.

HStack vs VStack vs ZStack: hangisini ne zaman kullanmalı

Stack seçimi düzen yönüne bağlıdır: HStack — yatay düzen (düğmeler, giriş satırları), VStack — dikey düzen (formlar, kartlar), ZStack — katmanlama (arka planlar, katmanlar). Apple Human Interface Guidelines'a (2025) göre, karmaşık düzenler için stack'ler iç içe geçer: dıştaki VStack'in içinde HStack ve ZStack bulunur. LazyHStack ve LazyVStack, büyük koleksiyonlar için tembel sürümlerdir.

StackEksenDefault AlignmentNe Zaman KullanılmalıTembel Sürüm
HStackYatay.centerDüğme çubuğu, yatay listelerLazyHStack
VStackDikey.centerFormlar, profiller, kartlarLazyVStack
ZStackDerinlik (z).centerKatmanlama, arka planlar, katmanlar, rozetlerYok

Alignment ve Spacing: stack'lerin ince ayarı

alignment ve spacing parametreleri, SwiftUI stack'lerindeki alt öğelerin konumlandırılması üzerinde tam kontrol sağlar. HStack'teki Alignment, farklı yükseklikteki öğelerin dikey hizalamasını kontrol eder. VStack alignment, yatay hizalamayı kontrol eder. Spacing, stack'teki tüm alt öğeler arasındaki mesafeyi belirler. SwiftUI Lab'e (2025) göre alignment, standart (.top, .center, .bottom) veya AlignmentID aracılığıyla özel olabilir.

Swift
HStack(alignment: .top, spacing: 12) {
    Text("Başlık")
        .font(.largeTitle)
    VStack(alignment: .leading) {
        Text("Alt başlık")
        Text("Ek metin içeren açıklama")
            .font(.caption)
            .foregroundColor(.gray)
    }
}
.padding()

Burada, alignment .top büyük başlığı ve iç içe VStack'i üst kenar boyunca hizalar. Spacing 12 aralarında boşluk oluşturur. alignment .leading ile iç içe VStack, alt başlığı ve açıklamayı sol kenara hizalar. İç içe stack'ler içinde farklı alignment'ların birleştirilmesi, hassas düzen kontrolü sağlar.

İç içe stack'ler: karmaşık düzen oluşturma örnekleri

Gerçek arayüzler, iç içe HStack, VStack ve ZStack'lerin birleştirilmesiyle oluşturulur. Bir ürün kartı tipik bir örnektir: dıştaki VStack, bir resim (ZStack katmanla), bir başlık (Text), bir derecelendirme (HStack) ve bir fiyat içerir. Apple Sample Projects'e (2025) göre, stack'lerin iç içe geçme derinliği nadiren 4 seviyeyi aşar — daha derin iç içe geçme, kod okunabilirliğini ve performansı düşürür.

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("Akıllı Telefon Model X")
        .font(.headline)
    HStack(spacing: 8) {
        Text("$999")
            .font(.title2)
            .bold()
        Spacer()
        Image("star.fill")
            .foregroundColor(.yellow)
        Text("4.7")
    }
}
.padding()

Bu örnekte, VStack bir ZStack (indirim rozetli resim), bir ürün adı ve bir HStack (fiyat + derecelendirme) birleştirir. ZStack, «-20%» rozetini sağ üst köşeye yerleştirmek için alignment .topTrailing kullanır. HStack'teki Spacer, fiyatı sol kenara ve derecelendirmeyi sağ kenara iter.

Sıkça Sorulan Sorular

HStack ve VStack arasındaki fark nedir?

HStack öğeleri yatay olarak (soldan sağa) düzenlerken, VStack onları dikey olarak (yukarıdan aşağıya) düzenler. Her ikisi de alignment ve spacing'i destekler. HStack dikey olarak (top, center, bottom) hizalar, VStack yatay olarak (leading, center, trailing) hizalar. Seçim düzen yönüne bağlıdır: düğme satırları için HStack, formlar için VStack kullanın.

Overlay yerine ZStack ne zaman kullanılmalı?

ZStack ve overlay, katmanlamaya farklı yaklaşımlardır. ZStack, tüm alt öğeleri düzenin eşit parçaları olarak birleştirir. Overlay, tek bir görünüme eklenir ve onunla birlikte genişler. SwiftUI Lab'e (2025) göre overlay, tek bir görünüm üzerindeki küçük öğeler (rozet, simge) için tercih edilirken, ZStack tam çok bileşenli katmanlar içindir.

Bir SwiftUI stack'inde öğeler nasıl eşit boyutta yapılır?

HStack için .frame(maxWidth: .infinity) değiştiricisini veya VStack için .frame(maxHeight: .infinity) kullanın. Bir HStack'teki tüm alt öğeleri aynı genişlikte yapmak için her birine .frame(maxWidth: .infinity) ekleyin. VStack için, dikey boyutu zorlamak üzere .fixedSize(horizontal: false, vertical: true) kullanın.

Özet

  • HStack — alignment ve spacing parametreleriyle öğelerin soldan sağa yatay düzenlenmesi.
  • VStack — öğelerin yukarıdan aşağıya dikey düzenlenmesi, formlar ve kartlar için temel.
  • ZStack — arka planlar, katmanlar ve rozetler için derinlik ekseni boyunca öğelerin katmanlanması.
  • Stack'ler, maksimum 4 seviye derinlikle karmaşık düzenler oluşturmak için iç içe geçer.
  • HStack'te Alignment dikey hizalamayı, VStack'te yatay hizalamayı, ZStack'te tüm eksenler boyunca hizalamayı kontrol eder.
  • Spacer() stack'ler içinde esnek boşluklar oluşturarak öğeleri kenarlara iter.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun