Настройка показывает TouchWhenHighlighted, например. с помощью параметра IB «Показывает касание при выделении», на кнопке без названия будет изменено описание VoiceOver. После прочтения метки специальных возможностей VoiceOver подает звуковой сигнал и объявляет описание изображения. Есть ли способ отключить это поведение?
Запретить показу UIButton TouchWhenHighlighted изменения описания VoiceOver
Ответы (2)
Установите accessibilityContainerType = UIAccessibilityContainerTypeSemanticGroup
.
Установка значения accessibilityContainerType
на UIAccessibilityContainerTypeSemanticGroup
работает, и это здорово ????, но я не уверен, что это цель этого элемента.
Даже если кнопка может рассматриваться как контейнер, я понял, что это свойство экземпляра имеет дело с контейнеры на основе данных. ????
Я изучил вашу проблему, которая вызвала у меня любопытство, и, к сожалению, не смог найти подходящего решения с помощью Apple API.
Во-первых, я подумал, что это решение может помочь, но оно не сработало, как вы упомянули в своем комментарии... спасибо. ????
По-видимому, когда используется свойство showsTouchWhenHighlighted
, внутри кнопки появляется добавленное представление, которое отображает светящееся прикосновение ⟹ это изображение UIButtonBarPressedIndicator, которое вы можете обнаружить, например, благодаря иерархии отладки в Xcode. ????
Это новое изображение, похоже, устанавливает значение по умолчанию свойства признака доступности вашего изображения кнопки, даже если вы уже изменили его программно. ????
Итак, чтобы VoiceOver не использовал распознавание экрана и не считывал бесполезную информацию, я сделал что-то очень уродливое, но эффективное для достижения вашей цели в viewDidAppear
, например (см. лист «основные операции» этого ссылка):
myButton.subviews.forEach{$0.accessibilityTraits = .none}
Плохой хак из-за нативной проблемы реализации или простой строки кода, которую может понять любой, это решение удаляет все возможные функции распознавания экрана VoiceOver с кнопки ????... и мне все еще интересно, если вы Можете немного объяснить, почему ваше решение работает, пожалуйста. ????