在UIMenuItem上设置accessibilityLabel

时间:2016-07-07 17:56:52

标签: ios swift accessibility uimenuitem

我正在尝试设置accessibilityLabel的{​​{1}},但它似乎无效。无论如何,VoiceOver都会简单地读取项目的标题:

UIMenuItem

对于这个项目,VoiceOver读取" foo"而不是" bar。"此外, let foo = UIMenuItem(title: "foo", action: #selector(doSomething)) item.isAccessibilityElement = true item.accessibilityLabel = "bar" 似乎也被忽略了。

1 个答案:

答案 0 :(得分:0)

UIMenuItem元素实际上是一个UICalloutBarButton私有类,其中包含一个UIButtonLabel (iOS 13),并且自定义其a11y属性,即使您可以轻松地对其(非正式协议)进行编码。
这太疯狂了,因为要出售a11y应用程序,您必须使其适应用户需求,这绝对不是这种情况。?

但是,可以通过以下方法来实现您的目标:

  • 使菜单控制器不可访问(a11yTraits = .none)
  • 获取菜单控制器框架menuFrame属性)进行下一步。
  • 创建在显示UIAccessibilityElement init + accessibilityFrameInContainerSpace时包装菜单的可访问元素。
  • 对于此新的可访问元素,创建与[menuItems] each的每个元素匹配的a11y custom actions,您可以在此处提供VoiceOver标签。?

最好为每个menuItem 创建一个可访问元素(然后提供更好的自定义),但是我没有找到获取每个单独项目框架的方法。 ?

而且,不幸的是,该问题在最近3年中仍然存在。 ?

⚠️⬛️◼️?■️编辑▪️?◼️⬛️⚠️(2020/03/19)

我写了 D 护符 T 技术 S 支持事件(无731229763)< / em>来解决此问题,这是Apple的答案:

我们的工程师已经审核了您的请求,并确定您遇到的已知问题目前尚无解决方法。

我提交了一个错误报告,标题为 VoiceOver:accessibilityLabel无法在UIMenuItem元素上实现,引用为 FB7623526

现在,您知道为什么 accessibilityLabel没有用,并且对UIMenuItem元素没有影响。 ?