- Published on
frame(), padding() va offset()
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
SwiftUI view'lari odatda tarkibiga sig'adigan o'lchamda bo'ladi. Text β matni kengligidagina. Button β yorlig'ini o'rab oladi. Bu ko'pincha aynan kerakli nΠ°ΡΡΠ° β lekin har doim emas. View qanchalik katta bo'lishi, qaerda joylashishi yoki atrofida qancha joy bo'lishini aniq boshqarish kerak bo'lganda frame(), padding() va offset() yordamga keladi.
frame() β view joylashadigan tashqi qutini belgilash. padding() β view atrofiga yostiqcha qo'shish. offset() β view-ni odatdagi joyidan siljitish, lekin atrofdagi view'larni buzmagan holda.
Bu uchta modifikator SwiftUI-dagi rasmiy o'lchamlash va joylashtirish ishlarining katta qismini qoplaydi. Ularni deyarli har bir view-da ishlatishingiz kerak bo'ladi.
frame(), padding() va offset() variantlari
.frame(maxWidth: .infinity) β to'liq kenglikka cho'zish
// Konteynerning to'liq kengligini egallaydi
Text("To'liq Kenglikdagi Tugma")
.frame(maxWidth: .infinity)
.padding()
.background(.blue)
.foregroundStyle(.white)
.cornerRadius(12)
maxWidth: .infinity SwiftUI-ga bu view mavjud bo'lgan gorizontal joyni to'liq egallashini aytadi. Bu tugmalar, kartalar va ajralib turadigan bo'limlar uchun keng qo'llaniladigan pattern.
.frame(minWidth:maxWidth:) β moslashuvchan chegaralar
// Kamida 100 keng, ko'pi bilan 300 keng, mavjud joyda kengayadi
Text("Moslashuvchan matn")
.frame(minWidth: 100, maxWidth: 300)
.background(.yellow.opacity(0.4))
Moslashuvchan frame-lar view-ni belgilangan chegaralar ichida o'sishiga yoki qisqarishiga imkon beradi. View mavjud joy qadar keng bo'lishga harakat qiladi, lekin hech qachon 300 pt dan katta, 100 pt dan kichik bo'lmaydi.
.frame(alignment:) β frame ichida hizalash
// Tarkib frame-ning bosh (chap) chetiga hizalanadi
Text("Chapga hizalangan")
.frame(maxWidth: .infinity, alignment: .leading)
.padding()
View-ning frame-i tarkibidan katta bo'lganda, tarkib odatda markazlashadi. alignment: parametri uni chapga, o'ngga yoki boshqa joyga surish imkonini beradi. maxWidth: .infinity bilan birgalikda bu barcha text elementlarini chapga hizalashning standart usuli.
.padding(.top, 24) β ma'lum tomonga padding
VStack(alignment: .leading) {
// Sarlavha ustidan faqat yuqori padding qo'shadi
Text("Bo'lim Sarlavhasi")
.font(.headline)
.padding(.top, 24)
Text("Qo'shimcha yuqori joy yo'q tarkib")
}
Barcha tomonlarga emas, faqat ma'lum tomonga padding qo'shish uchun .padding(.top, n), .padding(.horizontal, n) va hokazolardan foydalaning. Bu bo'limlar orasidagi masofa boshqarilganda va vertikal ritm saqlanganida foydali.
Offset vs position:
offset()view-ni vizual siljitadi, lekin joylashuv tizimi uni qaerda deb hisoblashini o'zgartirmaydi. Boshqa view-lar joy berish uchun siljimaydi. Agar view joylashuvda haqiqatdan harakatlanishi kerak bo'lsa,padding()yokiframe()ishlating.
Tezkor ma'lumotnoma
| Modifikator | Vazifasi |
|---|---|
.frame(width:height:) | Qat'iy o'lcham. View tarkibi bu quti ichiga, odatda markazga joylashadi |
.padding(16) | View tarkibi va undan tashqaridagi har narsa orasiga barcha tomondan 16 pt joy qo'shadi |
.offset(x:y:) | View-ni x/y nuqtasiga vizual siljitadi. Boshqa view-lar harakatlanmaydi β ular bu view asl joyida deb hisoblashda davom etadi |
.background() | Frame-ni ko'rinadigan qilish uchun ishlatiladi, shunda har bir modifikator qaysi maydonni qamrab olishini aniq ko'rish mumkin |
.frame(maxWidth: .infinity) | To'liq kenglikka cho'zadi |
.frame(minWidth:maxWidth:) | Moslashuvchan chegaralar |
.frame(alignment:) | Tarkibni frame ichida hizalashni nazorat qiladi |
.padding(.top, 24) | Faqat yuqori tomonga padding |
Topshiriq: karta View yaratish
Karta view yarating: sarlavha va taglavhani o'z ichiga olgan VStack, ikkalasi ham .frame(maxWidth: .infinity, alignment: .leading) yordamida chapga hizalangan. VStack barcha tomondan 16 pt padding, oq fon, 12 pt burchak radiusi va engil soyaga ega bo'lsin. Kartaning tagida to'liq kenglikdagi tugma qo'shing. Canvas-da tekshiring β karta real ilovadagidek ko'rinishi kerak.