- Published on
Layout konteynerlari: VStack, HStack, ZStack
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Hozirgacha sizning viewlaringiz (views) ekranda yolg'iz o'zi joylashgan edi. Bu bitta element uchun yaxshi ishlaydi, lekin haqiqiy ilova interfeyslari o'nlab viewlarni birlashtiradi β ularning ba'zilari vertikal ravishda joylashadi, ba'zilari yonma-yon, ba'zilari esa bir-birining ustiga qatlamlanadi. Ushbu darsda bularning barchasini amalga oshirish imkonini beruvchi uchta asosiy konteyner bilan tanishamiz.
Jismoniy makonni qanday tasvirlashingiz haqida o'ylab ko'ring: "yorliq tugmaning tepasida turibdi," "ikonka sarlavhaning chap tomonida joylashgan," "belgi (badge) rasmning ustida turibdi." SwiftUI-da ushbu har bir bog'liqlik uchun alohida konteyner vaqtinchalik mavjud: vertikal joylashuv uchun VStack, gorizontal uchun HStack va qatlamli (ustma-ust) joylashuv uchun ZStack. Siz viewlarni xuddi qutidagi narsalar kabi ularning ichiga joylashtirasiz (nesting qilasiz).
Ushbu darsning oxiriga kelib, siz har bir stack qanday ishlashini, ularni qanday birlashtirishni hamda ularning tekislanishi (alignment) va elementlar orasidagi masofani (spacing) qanday boshqarishni bilib olasiz. Ushbu uchta konteyner siz yaratadigan deyarli har bir SwiftUI interfeysining asosi hisoblanadi.
Stack'lar qanday ishlaydi
| Konteyner | Bolalarini qanday joylashtiradi |
|---|---|
VStack { } | Ko'rinishlarni vertikal ravishda joylashtiradi β birinchi bola eng tepada, oxirgi bola eng pastda bo'ladi. |
HStack { } | Ko'rinishlarni gorizontal ravishda joylashtiradi β birinchi bola chap tomonda, oxirgi bola o'ng tomonda bo'ladi. |
ZStack { } | Ko'rinishlarni bir-birining ustiga qatlamlaydi β birinchi bola eng orqa fonda, oxirgi bola eng tepada bo'ladi. |
Uchta stack konteyneri
alignment: parametri bolalarning stack ichida gorizontal ravishda qanday tekislanishini nazorat qiladi β .leading (chapga), .center (sukut bo'yicha - o'rtaga) yoki .trailing (o'ngga). spacing: esa har bir bola ko'rinish orasidagi masofani (point o'lchamida) belgilaydi.
Spacer() β SwiftUI interfeysini loyihalashdagi eng foydali vositalardan biridir. U stack yo'nalishi bo'yicha barcha mavjud bo'sh joyni egallash uchun kengayadi va shu orqali qo'shni viewlarni chetga surib yuboradi. Masalan, o'rtasiga Spacer qo'yilgan HStack-da chapdagi element chap chetga, o'ngdagi element esa o'ng chetga suriladi.
ZStack-ning alignment: parametri qatlamlangan elementlarning stack chegarasi ichida qayerda joylashishini belgilaydi. Undan foydalanib, matnni orqa fondagi tasvirning istalgan burchagiga yoki markaziga tekislashingiz mumkin.
Stack'larni bir-birining ichiga joylashtirish (nesting) β murakkab va professional interfeyslarni qurishning asosiy usulidir. HStack ichida VStack joylashtirish orqali siz deyarli barcha iOS ilovalari ro'yxatlarida, profil kartalarida va sozlamalar ekranlarida uchraydigan "chapda ikonka, o'ngda ikki qatorli matn" andozasini osongina yaratishingiz mumkin.
π‘ Stack ichida maksimal 10 ta element:
SwiftUI-dagi har qanday stack bevosita o'z ichiga ko'pi bilan 10 ta bola ko'rinishni (child views) qabul qila oladi. Agar sizga bundan ko'proq element kerak bo'lsa, ularning bir qisminiGroup { }konteyneriga o'rashingiz lozim. Amaliyotda 10 tadan ortiq to'g'ridan-to'g'ri bolaga ehtiyoj kamdan-kam seziladi, biroq buni oldindan bilib qo'ygan yaxshi.
Tezkor ma'lumotnoma (quick reference)
| Sintaksis | U nima vazifa bajaradi |
|---|---|
VStack { } | Ko'rinishlarni tepadan pastga joylashtiradi, sukut bo'yicha markazga tekislaydi |
VStack(alignment: .leading) { } | Ko'rinishlarni tepadan pastga joylashtiradi, chap tomonga tekislaydi |
VStack(spacing: 12) { } | Ko'rinishlarni elementlar orasida 12pt masofa qoldirib vertikal joylashtiradi |
HStack { } | Ko'rinishlarni yonma-yon joylashtiradi, vertikal markaz bo'yicha tekislaydi |
ZStack { } | Ko'rinishlarni markaz bo'yicha ustma-ust qatlamlaydi |
ZStack(alignment: .bottomLeading) { } | Ko'rinishlarni ustma-ust qatlamlab, pastki chap burchakka tekislaydi |
Spacer() | Stack yo'nalishi bo'yicha barcha mavjud bo'shliqni to'ldiradi |
Sun'iy intellektdan chuqurroq o'rganish uchun foydalanish
1. Tushunchalarni chuqurlashtirish (ai'dan repetitor sifatida foydalaning):
- "Men SwiftUI-dagi VStack, HStack va ZStack tushunchalarini o'rganyapman. Iltimos, menga biror UI tartibini oddiy tilda tasvirlab bering (masalan: 'chapda rasm, o'ngda tepama-tashlangan sarlavha va taglavha') va mendan qaysi stack'larni ishlatishim va ularni qanday joylashtirishim kerakligini so'rang. Savollarni bittalab bering va javoblarimni tekshiring."
- "SwiftUI-da Spacer() nima va u VStack hamda HStack ichida qanday turlicha ishlaydi? Kod yozmasdan, avval tushunchani tushuntirib bering, keyin esa oddiy kod misolini ko'rsating."
2. Amaliy ko'rinish yaratish (xcode-da sinab ko'rish uchun):
- "iOS kontaktlar ilovasidagi kabi kontakt qatorini yaratish uchun ichma-ich joylashgan VStack va HStack ishlatilgan SwiftUI Viewni yozib bering. Unda avatar ikonka, ism va telefon raqami bo'lsin. Har bir qator kodning tepasida u qanday vazifa bajarayotganini va nima uchun aynan shu stack tanlanganini yangi boshlovchiga tushuntirgandek izohlab yozing."
π― Topshiriq: statistika qatori yaratish
Ijtimoiy tarmoq profillarida ko'rish mumkin bo'lgan, uchta statistikadan tashkil topgan gorizontal qatorni yarating. Har bir statistika ustunida tepada qalin shriftda raqam va pastida shaxsiy xira matn bo'lishi kerak (masalan, "248" tepada va uning tagida "Posts", "12K" va tagida "Followers", "540" va tagida "Following"). Ushbu uchta ustun butun ekran kengligi bo'ylab tekis joylashishi uchun Spacer()dan foydalaning.
π‘ Maslahat:
Sizga bitta gorizontalHStackichida uchta alohidaVStackkerak bo'ladi. Ular ekran bo'ylab tekis masofada tarqalishi uchun VStacks va chetlar orasigaSpacer()qo'ying. Raqamga.font(.title2).fontWeight(.bold)va tagtag matnga.font(.caption).foregroundStyle(.secondary)modifikatorlarini qo'llang.