Framework’e Karşı Savaşmayı Bırak
SwiftUI kodlarında sürekli gördüğüm bir kalıp var: Button‘ın label closure’ına doğrudan Image koyarak elle yalnızca simge butonları oluşturmak. Görsel olarak işe yarıyor, ama erişilebilirlik bilgisini çöpe atıyor ve SwiftUI’ın tasarımına karşı çalışıyor.
Yanlış Yol
Button {
toggleSidebar()
} label: {
Image(systemName: "sidebar.left")
}Bu, dokunulabilir bir simge render ediyor, ama VoiceOver’ın duyuracak anlamlı bir etiketi yok. Kullanıcı “button” veya ham SF Symbol adı gibi bir şey duyuyor ki bu yardımcı değil.
Doğru Yol
Button("Toggle Sidebar", systemImage: "sidebar.left") {
toggleSidebar()
}
.labelStyle(.iconOnly)Veya açıkça Label kullanarak:
Button(action: toggleSidebar) {
Label("Toggle Sidebar", systemImage: "sidebar.left")
}
.labelStyle(.iconOnly)![]()
Neden Önemlidir
Label view’ı hem bir başlık hem de bir simge taşıyor. .labelStyle(.iconOnly) uyguladığında, SwiftUI başlığı görsel olarak gizliyor ama erişilebilirlik ağacında koruyor. VoiceOver “Toggle Sidebar, button” diye duyuracak – tam olarak kullanıcının duyması gereken şey.
Bu kalıp aynı zamanda kodunu daha esnek yapıyor. Daha sonra simgenin yanında metin göstermeye karar verirsen (örneğin iPad’de bir araç çubuğunda), label stilini .titleAndIcon olarak değiştirmen yeterli. Yeniden yapılandırma gerekmiyor.
Butonların Ötesinde
Aynı prensip Label kabul eden her view için geçerli: NavigationLink, Toggle, Picker, menü öğeleri. Çıplak bir Image kullanmak istediğinde, stili modifier ile bir Label’ın daha uygun olup olmayacağını kendine sor. Neredeyse her durumda, öyle.
