Установить accessibilityLabel на UIMenuItem
Я пытаюсь установить accessibilityLabel
из UIMenuItem
и это, кажется, не имеет никакого эффекта. VoiceOver просто читает заголовок элемента независимо от того, что:
let foo = UIMenuItem(title: "foo", action: #selector(doSomething))
item.isAccessibilityElement = true
item.accessibilityLabel = "bar"
Для этого элемента VoiceOver читает "foo" вместо "bar". Так же accessibilityHint
кажется, также игнорируется.
0 ответов
В UIMenuItem
элемент на самом деле UICalloutBarButton
частный класс, содержащий UIButtonLabel
(iOS 13) и, как есть, вы не можете настроить его свойства a11y, даже если можете легко его запрограммировать (неофициальный протокол).
Это безумие, потому что для того, чтобы продавать удобное приложение, вы ДОЛЖНЫ адаптировать его для пользователей, а здесь это определенно не так.
Однако для достижения вашей цели можно применить следующее обходное решение:
- Сделать контроллер меню недоступным (a11yTraits =.none).
- Получите рамку контроллера меню (
menuFrame
property) для следующего шага. - Создайте доступный элемент, который обертывает меню при отображении (
UIAccessibilityElement
init +accessibilityFrameInContainerSpace
). - Для этого нового доступного элемента создайте любые настраиваемые действия, соответствующие каждому элементу [menuItems] ⟹ здесь вы можете указать метку VoiceOver.
Было бы лучше создать доступный элемент для каждого menuItem (а затем обеспечить лучшую настройку), но я не нашел способа получить рамку каждого отдельного элемента.
И, к сожалению, эта проблема актуальна последние 3 года.
⚠️ ⬛️◼️▪️ EDIT ▪️◼️⬛️ ⚠️ (2020/03/19)
Я написал D eveloper T echnical S оддержка Incident (нет 731229763) для этой проблемы, и вот ответ от Apple:
Наши инженеры рассмотрели ваш запрос и определили, что вы столкнулись с известной проблемой, для которой в настоящее время нет известного решения.
Я отправил отчет об ошибке под названием VoiceOver: accessibilityLabel не может быть реализована в элементе UIMenuItem со ссылкой FB7623526.
Теперь вы знаете, почему accessibilityLabel бесполезен и не влияет на элемент UIMenuItem.