İçeriğe geç

Button İçine Image Yerleştirmek Yerine .labelStyle(.iconOnly) Kullan

Okunabilirlikten ödün vermeden erişilebilirliği koruyan, yalnızca simge butonları için doğru SwiftUI kalıbı.

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)

Code comparison showing the wrong way versus the right way

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.

İşine yaradı mı? Swift ipuçları ve indie geliştirici güncellemeleri için Bluesky ve Mastodon üzerinden takip et.