- Published on
SwiftUI da VStack, HStack, va ZStack
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Hammaga salom!
Hammaga salom! Men Nikman. Bu video siz kutgan video bo‘lishi mumkin – bu videoda stacklar haqida gaplashamiz. SwiftUI’da stacklar ekrandagi elementlarni tekislashning oson usuli – ularni chapdan o‘ngga, yuqoridan pastga yoki oldidan orqaga joylashtirish uchun ishlatiladi.
Biz SwiftUI’dagi uch asosiy stack turini ko‘rib chiqamiz:
- HStack – gorizontal (chapdan o‘ngga).
- VStack – vertikal (yuqoridan pastga).
- ZStack – Z-indeksi (oldinga-orqaga).
Men sizlarga ularni ekranga qanday qo‘shishni, so‘ngra moslashtirishni – freymlar, oraliqlar va tekislashni o‘zgartirib, ajoyib dizaynlarni qanday yaratishni ko‘rsataman. Keyin esa stacklar ichida stacklar qanday qo‘llanilishini ko‘rsataman – ha, stacklarni bir-birining ichiga cheksiz joylashtirib, murakkab ekranlar qurish mumkin. SwiftUI’da har bir ekranda stacklardan foydalanasiz, shuning uchun ularni moslashtirish, tekislash va bir-biri bilan qanday ishlashini to‘liq tushunish juda muhim.
Umid qilamanki, sizlar ham men kabi hayajondasiz – keling, stacklashni boshlaymiz! (Bu o‘ylaganimdan sal salqinroq chiqdi, keling, kod yozamiz!)
Yangi fayl yaratish
Xcode loyihamizga qaytdim. Bu videodagi kod uchun yangi fayl yaratyapman:
- Project Navigator’da (chapda) o‘ng tugmani bosing.
- “New File” > “SwiftUI View”ni tanlang.
- Fayl nomini “StacksBootcamp” deb qo‘ying.
Fayl ochilgach, o‘ngdagi preview’da “Resume” tugmasini bosing – preview ulanadi.
VStack (Vertikal Stack)
Uch turdagi stackni ko‘rib chiqamiz:
// VStack - vertikal (yuqoridan pastga)
// HStack - gorizontal (chapdan o‘ngga)
// ZStack - Z-indeksi (oldinga-orqaga)
VStack bilan boshlaymiz:
VStack {
Rectangle()
.fill(Color.red)
.frame(width: 100, height: 100)
Rectangle()
.fill(Color.green)
.frame(width: 100, height: 100)
Rectangle()
.fill(Color.orange)
.frame(width: 100, height: 100)
}
- VStack – elementlarni vertikal joylashtiradi.
- Birinchi qizil to‘rtburchak yuqorida, oxirgi to‘q sariq pastda.
HStack (Gorizontal Stack)
HStack {
Rectangle()
.fill(Color.red)
.frame(width: 100, height: 100)
Rectangle()
.fill(Color.green)
.frame(width: 100, height: 100)
Rectangle()
.fill(Color.orange)
.frame(width: 100, height: 100)
}
- HStack – elementlarni gorizontal joylashtiradi.
- Qizil chapda, to‘q sariq o‘ngda.
ZStack (Z-indeksi Stack)
ZStack {
Rectangle()
.fill(Color.red)
.frame(width: 150, height: 150)
Rectangle()
.fill(Color.green)
.frame(width: 130, height: 130)
Rectangle()
.fill(Color.orange)
.frame(width: 100, height: 100)
}
- ZStack – elementlarni oldinga-orqaga qatlamlaydi.
- Birinchi (qizil) orqada, oxirgi (to‘q sariq) oldida – o‘lchamlar farqi tufayli ko‘rinadi.
Tekislash (Alignment)
ZStack(alignment: .topLeading) {
Rectangle()
.fill(Color.red)
.frame(width: 150, height: 150)
Rectangle()
.fill(Color.green)
.frame(width: 130, height: 130)
Rectangle()
.fill(Color.orange)
.frame(width: 100, height: 100)
}
alignment: .topLeading– ZStack ichidagi elementlarni yuqori chapga tekislaydi..trailing,.bottomva boshqa variantlar ham mavjud.
VStack tekislash
VStack(alignment: .leading, spacing: 30) {
Rectangle()
.fill(Color.red)
.frame(width: 200, height: 200)
Rectangle()
.fill(Color.green)
.frame(width: 150, height: 150)
Rectangle()
.fill(Color.orange)
.frame(width: 100, height: 100)
}
.leading– chapga tekislaydi.spacing: 30– elementlar orasiga 30 piksel bo‘shliq qo‘shadi (standart – 8).
HStack tekislash
HStack(alignment: .top, spacing: 0) {
Rectangle()
.fill(Color.red)
.frame(width: 200, height: 200)
Rectangle()
.fill(Color.green)
.frame(width: 150, height: 150)
Rectangle()
.fill(Color.orange)
.frame(width: 100, height: 100)
}
.top– yuqoriga tekislaydi.spacing: 0– oraliqni yo‘q qiladi.
Stacklar ichida stacklar
Stacklarni bir-birining ichiga joylashtirish:
ZStack {
Rectangle()
.fill(Color.yellow)
.frame(width: 350, height: 500)
VStack(spacing: 30) {
Rectangle()
.fill(Color.red)
.frame(width: 150, height: 150)
Rectangle()
.fill(Color.green)
.frame(width: 100, height: 100)
HStack(alignment: .bottom) {
Rectangle()
.fill(Color.purple)
.frame(width: 50, height: 50)
Rectangle()
.fill(Color.pink)
.frame(width: 75, height: 75)
Rectangle()
.fill(Color.blue)
.frame(width: 25, height: 25)
}
.background(Color.white)
}
.background(Color.black)
}
- ZStack: Sariq fon (350x500).
- VStack: Qizil, yashil va HStack (qora fon bilan).
- HStack: Uchta kichik to‘rtburchak (oq fon bilan), pastga tekislangan.
Real dunyo misoli
VStack(alignment: .center, spacing: 20) {
Text("5")
.font(.largeTitle)
.underline()
Text("Items in your cart")
.font(.caption)
.foregroundColor(.gray)
}
- VStack: Savatdagi buyumlar soni – “5” yuqorida, “Items in your cart” pastda, markazga tekislangan, 20 piksel oraliq bilan.
ZStack vs Background
VStack(spacing: 50) {
ZStack {
Circle()
.frame(width: 100, height: 100)
Text("1")
.font(.title)
.foregroundColor(.white)
}
Text("1")
.font(.title)
.foregroundColor(.white)
.background(
Circle()
.frame(width: 100, height: 100)
)
}
- ZStack: Doira orqada, matn oldida.
- Background: Matn oldida, doira orqada – ikkalasi bir xil ko‘rinadi.
- Tavsiya: Oddiy qatlamlar uchun
.background()ishlatish qulay; murakkab qatlamlar uchun ZStack.
Xulosa
Bu videoda stacklarni:
- Qo‘shish (VStack, HStack, ZStack),
- Moslashtirish (spacing, alignment),
- Ichma-ich joylashtirishni o‘rgandik.
Stacklar SwiftUI’da har bir ekranda ishlatiladi – ularni yaxshi tushunsangiz, professional darajaga chiqasiz. Video uzunroq bo‘ldi, lekin foydali bo‘ldi deb umid qilaman! Men Nikman, bu “Swiftful Thinking”, keyingi videoda ko‘rishguncha!