Quero chamar a função abaixo no HStack. Não recebo erros, mas a acessibilidade não está definida. Tenho certeza de que estou fazendo algo errado, mas não consegui descobrir. Sou novo no swiftUI.
extension View {
func setAccessibility(label: String, identifier: String, ignoreChildren: Bool) -> some View {
if ignoreChildren {
_ = accessibilityElement(children: .ignore)
} else {
_ = accessibilityElement()
}
_ = accessibilityIdentifier(identifier)
_ = accessibilityLabel(label)
return self
}
}
Uso:
var body: some View {
ZStack {
HStack {
Image(.logo)
.resizable()
.frame(width: UIConsts.logoImageHeight, height: UIConsts.logoImageHeight)
Text("Hello")
Spacer()
Image(.arrowRight)
.renderingMode(.template)
.foregroundColor(.blue)
}.frame(height: UIConsts.entryHeight)
.setAccessibility(label: "Test label", identifier: "Test", ignoreChildren: true)
}
}
Cada um dos modificadores de acessibilidade que você está usando retorna uma versão encapsulada da view à qual ele é aplicado. São esses encapsuladores que fornecem a funcionalidade que você está tentando adicionar à view.
Atualmente, você está ignorando os valores de retorno que os modificadores entregam, o que significa que as visualizações encapsuladas estão sendo descartadas. Então, é por isso que os modificadores parecem não estar funcionando.
→ Eu sugeriria encadear os modificadores dentro da extensão e retornar o resultado final.
No caso de
.accessibilityElement
, o parâmetro padrão é.ignore
. Em outras palavras, chamá-lo sem parâmetros é o mesmo que chamá-lo com um parâmetro de.ignore
. Então você pode querer mudar a extensão para aceitar um parâmetro do tipoAccessibilityChildBehavior
, talvez com.ignore
como padrão?Exemplo de uso: