5

我正在尝试设置accessibilityLabela UIMenuItem,它似乎没有效果。无论如何,VoiceOver 只会读取项目的标题:

    let foo = UIMenuItem(title: "foo", action: #selector(doSomething))
    item.isAccessibilityElement = true
    item.accessibilityLabel = "bar"

对于此项目,VoiceOver 读取“foo”而不是“bar”。此外,accessibilityHint似乎也被忽略了。

4

1 回答 1

2

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

但是,可以按以下方式实施解决方法以达到您的目标:

  • 使菜单控制器不可访问(a11yTraits = .none)
  • 获取下一步的菜单控制器框架menuFrame属性) 。
  • 创建一个在显示时包装菜单的可访问元素UIAccessibilityElementinit + accessibilityFrameInContainerSpace
  • 对于这个新的可访问元素,创建与 [menuItems] 的每个元素匹配的a11y 自定义操作⟹ 您可以在此处提供 VoiceOver 标签。

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

而且,不幸的是,这个问题在过去 3 年中仍然存在。

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

为这个问题写了一个开发者技术支持 I ncident (编号731229763 这是来自 Apple 的答案:

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

我提交了一份题为VoiceOver: accessibilityLabel can't be implemented on a UIMenuItem element with reference FB7623526的错误报告。

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

于 2020-02-20T10:14:17.710 回答