Maxsus imkoniyatlar
Maxsus imkoniyatlar (accessibility)
Hamma uchun qulay tajribani ta’minlash maqsadida boshqaruv elementlariga yorliqlar bering, Dynamic Type va kontrastni qo‘llab-quvvatlang hamda VoiceOver bilan sinab ko‘ring.
VoiceOver va yorliqlar
Barcha interaktiv elementlar yordamchi texnologiyalar tomonidan idrok etilishi shart.
Mazmunli yorliqlar va maslahatlar taqdim eting.
Misol
import SwiftUI
struct ContentView: View {
@State private var count = 0
var body: some View {
VStack(spacing: 12) {
Text("Count: \(count)")
.accessibilityLabel("Current count")
.accessibilityValue("\(count)")
Button("Increment") { count += 1 }
.accessibilityHint("Increases the count by one")
}
.padding()
}
}
Ushbu misolda son ham yorliq, ham qiymat orqali idrok etiladi.
Dynamic Type va kontrast
Tizim matn uslublaridan (masalan, .font(.body)) foydalaning va rang kontrastini tekshiring.
Harakatni kamaytirish (reduced motion) va kontrastni oshirish (increased contrast) sozlamalarini hisobga oling.
Maslahat: VoiceOver, Larger Text, Bold Text va turli Appearance (Light/Dark) sozlamalari bilan sinab ko‘ring.
Xcode’dagi Accessibility Inspector’dan foydalaning.
Semantika va xususiyatlar (traits)
Yordamchi texnologiyalar UI’ingizni tushunishi uchun aniq semantika va xususiyatlarni (traits) taqdim eting.
Misol
import SwiftUI
struct PlanBadge: View {
var body: some View {
VStack {
Image(systemName: "star.fill")
.foregroundStyle(.yellow)
.accessibilityLabel("Favorite")
.accessibilityAddTraits(.isImage)
Text("Premium plan")
}
// Read as one element: "Favorite, Premium plan"
.accessibilityElement(children: .combine)
}
}
Yuqoridagi misolda rasm tasvir (image), matn esa yorliq (label) sifatida taqdim etiladi.
Fokus, tartib va guruhlash
O‘qish tartibini boshqaring va o‘zaro bog‘liq elementlarni guruhlang.
Misol
import SwiftUI
struct TotalRow: View {
var total: Double
var body: some View {
HStack {
Text("Total")
.accessibilitySortPriority(2)
Text(total, format: .currency(code: Locale.current.currency?.identifier ?? "USD"))
.accessibilitySortPriority(1)
}
// Alternatively, combine for a single announcement
// .accessibilityElement(children: .combine)
}
}
Yuqoridagi misolda jami qiymat bitta element sifatida o‘qiladi.
Maxsus amallar
VoiceOver foydalanuvchilariga sozlanadigan (adjustable) va nomlangan amallarni taqdim eting.
Misol
import SwiftUI
struct QuantityStepper: View {
@State private var qty = 1
var body: some View {
Stepper("Quantity: \(qty)", value: $qty)
.accessibilityValue("\(qty)")
.accessibilityAdjustableAction { direction in
switch direction {
case .increment: qty += 1
case .decrement: qty = max(0, qty - 1)
default: break
}
}
.accessibilityAction(named: Text("Reset")) { qty = 1 }
}
}
Yuqoridagi misolda stepper sozlanadigan amallarga va bitta nomlangan amalga ega.
Testlash uchun nazorat ro‘yxati: yorliq, qiymat, maslahat, xususiyatlar (traits); o‘qish tartibi; sozlanadigan amallar; Dynamic Type; qorong‘i/yorug‘ rejimdagi kontrast va Reduced Motion’ni tekshiring.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
