HStack, VStack va ZStack SwiftUI-da nima ekanligini tahlil qilamiz — Apple-ning barcha platformalarida foydalanuvchi interfeyslarini qurish uchun konteyner-steklar. HStack elementlarni gorizontal, VStack — vertikal, ZStack — chuqurlikda (ustma-ust joylashtirish) tartibga soladi. Steklar SwiftUI-ning asosidir: har bir ko'rinish alignment va spacing parametrlari bilan ichma-ich steklardan quriladi. Apple WWDC 2024 ma'lumotlariga ko'ra, SwiftUI ilovalaridagi ekranlarning 90% dan ortig'i ushbu uch stekning kombinatsiyasidan foydalanadi.
Asosiy nuqtalar
HStack (Horizontal Stack) — bu SwiftUI konteyneri bo'lib, bola ko'rinishlarni gorizontal chiziqqa joylashtiradi. Har bir bola elementi, boshqacha ko'rsatilmagan bo'lsa, kerakli darajada joy egallaydi. HStack ikkita majburiy parametrni qabul qiladi: alignment (vertikal tekislash, standart .center) va spacing (elementlar orasidagi masofa, standart nil — tizim masofasi). Apple Human Interface Guidelines (2025) ma'lumotlariga ko'ra, HStack tugma panellari, kiritish qatorlari va gorizontal ikonka ro'yxatlari uchun afzal ko'rilgan tanlovdir.
HStack(alignment: .center, spacing: 16) {
Image("star")
.resizable()
.frame(width: 24, height: 24)
Text("Sevimlilar")
.font(.body)
Spacer()
Image("chevron.right")
.foregroundColor(.gray)
}
.padding()
Ushbu misolda HStack uch elementdan iborat qator yaratadi: ikonka, matn va strelka. Spacer() elementlarni bir-biridan ajratadi — ikonka matn bilan chap chekkaga, strelka esa o'ng chekkaga suriladi. Alignment .center uchala elementni vertikal o'qning markaziga tekislaydi.
VStack (Vertical Stack) — bu bola elementlarni yuqoridan pastga vertikal joylashtirish uchun SwiftUI konteyneri. HStack kabi, alignment (gorizontal tekislash: .leading, .center, .trailing) va spacing qabul qiladi. VStack formalar, kartalar, profillar va sozlamalar ro'yxatini qurishning asosidir. Apple Docs (2025) ma'lumotlariga ko'ra, VStack LazyVStack bilan birgalikda SwiftUI-dagi vertikal joylashuv stsenariylarining 85% ni qamrab oladi.
VStack(alignment: .leading, spacing: 8) {
Text("Retsept nomi")
.font(.headline)
Text("Tayyorlash vaqti: 30 daq")
.font(.subheadline)
.foregroundColor(.secondary)
HStack(spacing: 4) {
Image("star.fill")
.foregroundColor(.yellow)
Text("4.8")
}
}
VStack alignment .leading bilan barcha qatorlarni chap chekkaga tekislaydi. VStack ichida reyting uchun HStack joylashgan — bu ichma-ich steklar orqali murakkab maketlar qurishning odatiy namunasidir. Spacing 8 matn qatorlari orasida bir tekis masofa yaratadi.
ZStack (Z-axis Stack) — bu bola ko'rinishlarni chuqurlik o'qi bo'ylab bir-birining ustiga joylashtirish uchun SwiftUI konteyneri. ZStack tanasidagi birinchi element fonda, oxirgisi esa oldingi planda chiziladi. ZStack ustida matn bo'lgan fon rasmlari, moslashtirilgan ko'rsatkichlar, ustma-ust tugmalar va o'tish animatsiyalari uchun ishlatiladi. Apple Docs (2025) ma'lumotlariga ko'ra, ZStack standart sifatida barcha elementlarni markazga tekislaydi (alignment: .center), lekin Alignment-ning istalgan kombinatsiyasini qo'llab-quvvatlaydi.
ZStack(alignment: .bottomLeading) {
Image("mountains")
.resizable()
.scaledToFill()
.frame(height: 200)
.clipped()
Color.black
.opacity(0.3)
Text("Tog' manzarasi")
.font(.title)
.bold()
.foregroundColor(.white)
.padding()
}
Ushbu misolda ZStack uchta qatlamni joylashtiradi: tog'lar tasviri, qoraytirish uchun yarim shaffof qora rang va sarlavhali matn. Alignment .bottomLeading matnni pastki chap burchakka suriladi. Qoraytirish (Color.black.opacity(0.3)) tasvirning yorug' qismlarida matnning o'qilishini yaxshilaydi.
Stekni tanlash joylashuv yo'nalishiga bog'liq: HStack — gorizontal joylashuv (tugmalar, kiritish qatorlari), VStack — vertikal joylashuv (formalar, kartalar), ZStack — ustma-ust joylashtirish (fonlar, qoplamalar). Apple Human Interface Guidelines (2025) ma'lumotlariga ko'ra, murakkab maketlar uchun steklar bir-birining ichiga joylashtiriladi: tashqi VStack ichida HStack va ZStack bo'ladi. LazyHStack va LazyVStack katta kolleksiyalar uchun len versiyalardir.
| Stek | O'q | Standart Alignment | Qachon ishlatish | Len bok versiya |
|---|---|---|---|---|
| HStack | Gorizontal | .center | Tugma qatorlari, gorizontal ro'yxatlar | LazyHStack |
| VStack | Vertikal | .center | Formalar, profillar, kartalar | LazyVStack |
| ZStack | Chuqurlik (z) | .center | Ustma-ust joylashtirish, fonlar, qoplamalar, nishonlar | Yo'q |
Alignment va spacing parametrlari SwiftUI steklarida bola elementlarning joylashishi ustidan to'liq nazorat beradi. HStack-dagi alignment turli balandlikdagi elementlarning vertikal tekislanishini boshqaradi. VStack-dagi alignment gorizontal tekislashni boshqaradi. Spacing stekdagi barcha bola elementlar orasidagi masofani belgilaydi. SwiftUI Lab (2025) ma'lumotlariga ko'ra, alignment standart (.top, .center, .bottom) va AlignmentID orqali moslashtirilgan bo'lishi mumkin.
HStack(alignment: .top, spacing: 12) {
Text("Sarlavha")
.font(.largeTitle)
VStack(alignment: .leading) {
Text("Pastki sarlavha")
Text("Qo'shimcha matn bilan tavsif")
.font(.caption)
.foregroundColor(.gray)
}
}
.padding()
Bu yerda alignment .top katta sarlavha va ichma-ich VStackni yuqori chekkaga tekislaydi. Spacing 12 ular orasida masofa yaratadi. Alignment .leading bilan ichma-ich VStack pastki sarlavha va tavsifni chap chekkaga tekislaydi. Ichma-ich steklarda turli alignment kombinatsiyasi maketni aniq boshqarish imkonini beradi.
Haqiqiy interfeyslar ichma-ich HStack, VStack va ZStack kombinatsiyasi bilan quriladi. Mahsulot kartasi — odatiy misol: tashqi VStack rasm (qoplamali ZStack), sarlavha (Text), reyting (HStack) va narxni o'z ichiga oladi. Apple Sample Projects (2025) ma'lumotlariga ko'ra, steklarning ichma-ich chuqurligi kamdan-kam 4 darajadan oshadi — chuqurroq ichma-ichlik kod o'qilishini va unumdorlikni pasaytiradi.
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("Smartfon Model X")
.font(.headline)
HStack(spacing: 8) {
Text("$999")
.font(.title2)
.bold()
Spacer()
Image("star.fill")
.foregroundColor(.yellow)
Text("4.7")
}
}
.padding()
Ushbu misolda VStack ZStack (chegirma nishoni bilan rasm), mahsulot nomi va HStack (narx + reyting) ni birlashtiradi. ZStack «-20%» nishonini yuqori o'ng burchakka joylashtirish uchun alignment .topTrailing dan foydalanadi. HStack-dagi Spacer narxni chap chekkaga, reytingni esa o'ng chekkaga suriladi.
Tez-tez so'raladigan savollar
HStack elementlarni gorizontal (chapdan o'ngga), VStack esa vertikal (yuqoridan pastga) joylashtiradi. Ikkalasi ham alignment va spacing-ni qo'llab-quvvatlaydi. HStack vertikal (top, center, bottom), VStack gorizontal (leading, center, trailing) tekislaydi. Tanlov maket yo'nalishiga bog'liq: tugma qatorlari uchun HStack, formalar uchun VStack dan foydalaning.
ZStack va overlay — ustma-ust joylashtirishga turlicha yondashuvlar. ZStack barcha bola elementlarni maketning teng huquqli qismlari sifatida birlashtiradi. Overlay bitta ko'rinishga biriktiriladi va u bilan birga cho'ziladi. SwiftUI Lab (2025) ma'lumotlariga ko'ra, overlay bitta ko'rinish ustidagi kichik elementlar (nishon, ikonka) uchun, ZStack esa to'liq ko'p komponentli qoplamalar uchun afzal.
HStack uchun .frame(maxWidth: .infinity) yoki VStack uchun .frame(maxHeight: .infinity) modifikatoridan foydalaning. HStack-dagi barcha bola elementlari bir xil kenglikda bo'lishi uchun har biriga .frame(maxWidth: .infinity) qo'shing. VStack uchun — .fixedSize(horizontal: false, vertical: true) vertikal bo'yicha majburiy o'lcham uchun.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.