- Published on
Maxsus ro'yxat qatorlari
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Maxsus ro'yxat qatorlari
Text bir qatorni to'ldirishi mumkin β lekin real ilovalar kamdan-kam shunday oddiy bo'ladi. Kitoblar ro'yxati ikonka, sarlavha va muallif ko'rsatadi. Kontaktlar ro'yxati avatar, ism va oxirgi xabarni ko'rsatadi. Sozlamalar ekranida ikonka, sarlavha va ba'zan o'ng tomonda qiymat bo'ladi.
Mana shu yerda maxsus qator view-lari kerak. Har bir qator uchun kodni alohida view struct-iga ajratish β kodni o'qilishini yaxshilaydi, ota-ona faylni ifloslantirmaydi va bir joyda o'zgartirish barcha qatorlarga ta'sir qiladi.
Qator view-lari boshqa SwiftUI view-laridan farq qilmaydi β ular faqat List yoki ForEach ichida ishlatiladi.
Qator patternlari
Ikonka + sarlavha (Label)
struct SozlamalarQatori: View {
let ikonka: String
let sarlavha: String
let rang: Color
var body: some View {
Label(sarlavha, systemImage: ikonka)
.foregroundStyle(rang)
}
}
Label β ikonka + matn juftligining qisqa yozilishi. Tizim spacing va o'lchamni avtomatik boshqaradi.
Chap kontent + o'ng detal
HStack {
VStack(alignment: .leading) {
Text(kitob.nomi).font(.headline)
Text(kitob.muallifi).font(.caption)
}
// Spacer qolgan joyni egallaydi β o'ng detalni chetga itaradi
Spacer()
Text(kitob.janr)
.font(.caption)
.foregroundStyle(.secondary)
}
Thumbnail + ko'p qatorli matn
HStack(spacing: 12) {
Image(systemName: "photo")
.resizable()
.scaledToFill()
.frame(width: 56, height: 56)
.clipShape(RoundedRectangle(cornerRadius: 8))
.background(Color.gray.opacity(0.2))
VStack(alignment: .leading, spacing: 2) {
Text(kitob.nomi).font(.headline)
Text(kitob.muallifi).font(.subheadline).foregroundStyle(.secondary)
Text(kitob.janr).font(.caption).foregroundStyle(.tertiary)
}
}
Musiqa, podcast va kitob ilovalardagi uch qatorli thumbnail patterni. .clipShape(RoundedRectangle(...)) yumaloq burchakli qiladi.
Keng tarqalgan xato: Qator tanasiga juda ko'p mantiq solish. Agar qator hisob-kitob qila boshlasa, ma'lumot yuklasa yoki har view uchun bir nechta modifikatordan ko'proq ishlasa, kichik komponentlarga ajrating yoki mantiqni view model ga o'tkazing. Qatorlar joylashuvni tasvirlashi kerak, qiymatlarni hisoblashi emas.
Tezkor ma'lumotnoma
| Pattern | Qachon ishlating |
|---|---|
| Faqat matn | Matn hal qiluvchi bo'lganda |
| HStack + ikonka + VStack | Eng keng tarqalgan β chap ikonka, o'ng sarlavha+taglavha |
| HStack + Spacer() + o'ng matn | O'ng tomonda narx, sana yoki holat kerak bo'lganda |
| HStack + thumbnail + VStack | Media ilovalar uchun rasm identifikatsiya qismida bo'lganda |
Label(sarlavha, systemImage:) | Maxsus layout kerak bo'lmaganda tezkor ikonka+matn |
Topshiriq: podcast qatori
Podcast struct yarating (id, nomi, podkastchi, davomiyligi). Kamida 4 ta element bilan @State massiv yarating. Har birini alohida PodcastQatori view-da ko'rsating: chap tomonda doira ikonka, o'rtada nom+podkastchi, o'ngda davomiylik matni. Simulyatorda tekshiring.