- Published on
SwiftUI-da SafeAreaInset β safe area ichiga element qo'yish (iOS 16+)
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Bu qisqa video. Safe area-ni avval alohida videoda ko'rib chiqqanmiz β bu uni o'zgartirmaydi. .safeAreaInset esa safe area ichiga ataylab element qo'yish uchun iOS 16 da kelgan yangi modifier. Keng tarqalgan emas, lekin bilish kerak.
Asosiy sozlama
struct SafeAreaInsetBootcamp: View {
var body: some View {
NavigationStack {
List {
ForEach(0..<10) { _ in
Rectangle()
.frame(height: 300)
}
}
.navigationTitle("Safe Area Insets")
}
}
}
Muammo β pastki safe area-ga element qo'yish
Avvalgi usul β overlay bilan:
NavigationStack {
List { ... }
.overlay(alignment: .bottom) {
Text("Salom!")
.frame(maxWidth: .infinity)
.background(Color.yellow)
}
}
Bu ham ishlaydi. .safeAreaInset esa yangi va soddaroq yo'l.
safeAreaInset β yangi usul
NavigationStack {
List { ... }
.navigationTitle("Safe Area Insets")
.safeAreaInset(edge: .bottom, alignment: .center, spacing: nil) {
Text("Salom!")
.frame(maxWidth: .infinity)
.background(Color.yellow)
}
}
Natija avvalgi overlay usuli bilan bir xil, lekin qurilmalar orasida biroz ko'proq moslashuvchan.
Alignment β joylashtirish
// Markazda (standart)
.safeAreaInset(edge: .bottom, alignment: .center) {
Text("Markaz")
.background(Color.yellow)
}
// Chapda
.safeAreaInset(edge: .bottom, alignment: .leading) {
Text("Chap")
.padding()
.background(Color.yellow)
.clipShape(Circle())
}
// O'ngda
.safeAreaInset(edge: .bottom, alignment: .trailing) {
Text("O'ng")
.padding()
.background(Color.yellow)
.clipShape(Circle())
}
Chapga yoki o'ngga joylashtirib, ustiga padding va clipShape(Circle()) qo'shsangiz β pastki burchakda suzib turuvchi doira tugma hosil bo'ladi. Ilovalarning ko'pida shu ko'rinishni uchratish mumkin.
Yuqori safe area β .top
NavigationStack {
List { ... }
.navigationBarTitleDisplayMode(.inline)
.navigationTitle("Safe Area Insets")
.safeAreaInset(edge: .top) {
Text("Pinned sarlavha")
.frame(maxWidth: .infinity)
.background(Color.yellow)
}
}
.top edge-i navigatsiya sarlavhasi ostiga element qo'yadi. Scroll qilganda element o'sha yerda qoladi β xuddi pinned header kabi. LazyVStack bilan pinnedViews-ni eslatadi, lekin bu yanada sodda.
overlay va safeAreaInset taqqoslov
// Eski usul β overlay
.overlay(alignment: .bottom) {
Text("Salom!")
.frame(maxWidth: .infinity)
.background(Color.yellow)
}
// Safe area-ni o'zingiz boshqarishingiz kerak
// ignoresSafeArea qo'shish/qo'shmaslikni o'ylash kerak
// Yangi usul β safeAreaInset
.safeAreaInset(edge: .bottom) {
Text("Salom!")
.frame(maxWidth: .infinity)
.background(Color.yellow)
}
// Safe area avtomatik hisobga olinadi
// Kod qisqaroq va tushunarli
Xulosa
.safeAreaInset ilgari ham qilish mumkin bo'lgan narsani β faqat soddaroq qiladi. overlay + ignoresSafeArea kombinatsiyasini o'zingiz boshqarish o'rniga, modifier buni avtomatik hal qiladi.
Keng tarqalgan emas, lekin pastki yoki yuqori safe area-ga suzib turuvchi tugma, filter paneli yoki pinned sarlavha qo'yish kerak bo'lganda qulay.
Rahmat, men Nick, bu Swiftful Thinking va keyingi videoda ko'rishguncha!