Características em Conflito

This page is not available in the language you requested. You have been redirected to the English version of the page.
Link to this page copied to clipboard

Não atribua características de acessibilidade contraditórias ao mesmo elemento

Not for use with personal data
Best Practice Impact - Critical

O Que Verificamos

Cada *vista* - um elemento interativo, como um botão, rótulo ou controle personalizado - pode ser atribuído a *características de acessibilidade*. Esses metadados dizem ao VoiceOver que tipo de elemento é e como interagir com ele. Esta regra verifica se nenhuma visualização está atribuída a características que se contradizem ou interferem na navegação do VoiceOver.

Esta regra impõe uma prática recomendada definida sob Traços de Acessibilidade do UIKit da Apple. Você pode desativar esta regra a partir do Painel Móvel ou por ignorando a regra em testes escritos para iOS.

Exemplo de Falha ❌

An iOS phone screen showing a 'Read article' button. A VoiceOver bar at the bottom reads 'Read article, Button, Link' — two conflicting roles announced for a single element

Um botão é atribuído a both the button and link traits

O VoiceOver anuncia two conflicting roles simultaneamente:
„Ler artigo, Botão, Link“

Isso é confuso e enganoso — um único elemento nunca deve ter dois papéis contraditórios

Exemplo de Sucesso ✅

An iOS phone screen showing a 'Read article' button. A VoiceOver bar at the bottom reads 'Read article, Link' — a single correct role for the element

O elemento é atribuído a only the link trait

O VoiceOver anuncia um único papel claro:
„Ler artigo, Link“

Gestos de navegação funcionam conforme esperado para o papel atribuído

Resumo

  • Esta regra tem um impacto crítico para os usuários
  • As características de acessibilidade informam ao VoiceOver o que é um elemento e como interagir com ele - características conflitantes produzem um comportamento confuso ou com falhas
  • Conflitos comuns: características de função como "botão" + "link", ou características de navegação como "cabeçalho" + "ajustável"

Impacto para os Usuários

Pessoas que usam o VoiceOver e o Controle Assistido são as mais impactadas. Quando um elemento tem características conflitantes, o VoiceOver pode anunciar dois papéis simultaneamente (por exemplo, "Botão, Link"), o que é confuso e enganoso. Certas combinações de características - como "cabeçalho" e "ajustável" - também podem quebrar os gestos de navegação do VoiceOver, tornando partes da tela inacessíveis.

Confirmar Problema de Características em Conflito

  1. Ative o VoiceOver
  2. Foque no elemento
  3. Uma das seguintes situações ocorrerá:
    • Inacessível: o VoiceOver anuncia dois papéis conflitantes (como "Botão" e "Link")
    • Inacessível: um gesto de navegação do VoiceOver para de funcionar (por exemplo, usando "cabeçalho" e "ajustável" juntos)
    • Acessível: todos os papéis são distintos e os gestos de navegação funcionam como previsto

Corrigir Problemas

Para resolver um problema de Características em Conflito, garanta que cada elemento tenha apenas uma característica de função, e que todas as características atribuídas sejam compatíveis entre si.

UIKit

Para corrigir no Storyboard:

  1. Selecione o elemento com características de acessibilidade conflitantes.
  2. Certifique-se de que o Painel do Inspetor esteja visível.
  3. Selecione o **Inspetor de Identidade**.
  4. Sob **Acessibilidade**, encontre a categoria **Características** e desmarque a característica conflitante.

Para corrigir no código, remova a característica conflitante. Por exemplo, se um botão estiver incorretamente atribuído tanto a .button quanto a .link:

button.accessibilityTraits = [.button, .link]

Mantenha apenas a característica que reflete o comportamento real do elemento. Se o elemento se comporta como um link, remova a característica de botão:

button.accessibilityTraits = .link

SwiftUI

Use .accessibility(addTraits:) e .accessibility(removeTraits:) juntos para garantir que o elemento tenha apenas as características que refletem com precisão o seu comportamento. Por exemplo, se um botão imitar um link, remova a característica padrão do botão e adicione a característica de link:

var body: some View {
    Button(action: { openLink() },
           label: {
        Text("Visit the website").padding()
    })
    .accessibility(addTraits: .isLink)
    .accessibility(removeTraits: .isButton)
}

React Native

É improvável que esta regra seja acionada em elementos React Native, porque accessibilityRole aceita apenas um valor. Use o valor accessibilityRole que descreve mais precisamente o comportamento esperado do elemento:

<Button
  title={'Learn more about axeDevTools'}
  accessible={true}
  accessibilityRole='link'
  onPress={goToLink}
/>

Posso ignorar esta regra?

Traços em Conflito têm um Crítico para os usuários, e recomendamos tomar medidas para remediar este problema. Embora esta regra imponha uma prática recomendada da Apple, ela é muito impactante. Se um controle tiver características conflitantes, os usuários do VoiceOver podem não conseguir interagir com ele de forma alguma. Ainda assim, é possível desativar esta regra a partir do Painel Móvel ou ignorar resultados individuais em seus testes iOS. Saiba mais sobre ignorar regras.

Recursos