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 (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.
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 (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.
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 (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.
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.
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.
| Stack | Eksen | Default Alignment | Ne Zaman Kullanılmalı | Tembel Sürüm |
|---|---|---|---|---|
| HStack | Yatay | .center | Düğme çubuğu, yatay listeler | LazyHStack |
| VStack | Dikey | .center | Formlar, profiller, kartlar | LazyVStack |
| ZStack | Derinlik (z) | .center | Katmanlama, arka planlar, katmanlar, rozetler | Yok |
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.
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.
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.
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 öğ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.
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.
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
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.
Ayrıca okuyun