【问题标题】:Set accessibilityLabel on UIMenuItem在 UIMenuItem 上设置accessibilityLabel
【发布时间】:2016-07-07 17:56:51
【问题描述】:
我正在尝试设置UIMenuItem 的accessibilityLabel,它似乎没有效果。无论如何,VoiceOver 只会读取项目的标题:
let foo = UIMenuItem(title: "foo", action: #selector(doSomething))
item.isAccessibilityElement = true
item.accessibilityLabel = "bar"
对于此项目,VoiceOver 读取“foo”而不是“bar”。此外,accessibilityHint 似乎也被忽略了。
【问题讨论】:
标签:
ios
swift
accessibility
voiceover
uimenuitem
【解决方案1】:
UIMenuItem 元素实际上是一个 UICalloutBarButton 私有类,其中包含一个 UIButtonLabel(iOS 13),并且,您不能自定义它的 a11y 属性 即使您可以轻松编写代码(非正式协议)。
这太疯狂了,因为要销售 a11y 应用程序,您必须使其适应用户,而这里绝对不是这种情况。?
但是,为了达到您的目标,可以采用以下解决方法:
- 使菜单控制器无法访问(a11yTraits = .none)。
- 为下一步获取菜单控制器框架(
menuFrame property)。
- 创建一个可访问的元素,在显示时包裹菜单(
UIAccessibilityElement init + accessibilityFrameInContainerSpace)。
- 对于这个新的可访问元素,创建与 [menuItems] 的每个元素匹配的 a11y custom actions ⟹ 您可以在此处提供 VoiceOver 标签。?
为每个 menuItem 创建一个可访问的元素会更好(然后提供更好的自定义),但我没有找到获取每个单独项目的框架的方法。 ?
不幸的是,这个问题在过去 3 年中仍然存在。 ?
⚠️ ⬛️◼️?▪️ 编辑 ▪️?◼️⬛️ ⚠️ (2020/03/19)
我写了一个D开发者T技术S支持我事件(编号731229763) 对于这个问题,这是 Apple 的答案:
我们的工程师已审核您的请求,并确定您遇到了一个已知问题,目前没有已知的解决方法。
我提交了一份题为 VoiceOver:accessibilityLabel 无法在 UIMenuItem 元素上实现 的错误报告,其中引用了 FB7623526。
现在,您知道为什么 accessibilityLabel 无用且对 UIMenuItem 元素没有影响。 ?