在 UIMenuItem 上设置辅助功能标签



我正在尝试设置UIMenuItemaccessibilityLabel,但似乎没有效果。无论如何,旁白都只是读取项目的标题:

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

对于此项目,旁白会读"foo"而不是"bar"。 此外,accessibilityHint似乎也被忽略了。

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

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

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

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

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

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

我为这个问题写了一个 Developer Technical Support Incident (没有731229763),这是苹果的答案:

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

我提交了一份名为 VoiceOver 的错误报告:无法使用引用FB7623526在 UIMenuItem 元素上实现辅助功能标签

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

最新更新