在 UIMenuItem 上设置accessibilityLabel

Jon*_*oks 5 accessibility ios voiceover uimenuitem swift

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

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

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

XLE*_*_22 2

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

\n\n

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

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

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

\n\n

不幸的是,这个问题在过去三年里仍然存在。

\n\n

\xe2\x9a\xa0\xef\xb8\x8f \xe2\xac\x9b\xef\xb8\x8f\xe2\x97\xbc\xef\xb8\x8f\xe2\x96\xaa\xef\xb8\x8f编辑 \ xe2\x96\xaa\xef\xb8\x8f\xe2\x97\xbc\xef\xb8\x8f\xe2\xac\x9b\xef\xb8\x8f\xe2\x9a\xa0\xef\xb8\x8f (2020 / 03/19)

\n\n

我针对这个问题写了一篇开发者技术支持事件编号731229763 是Apple 的答案:

\n\n
\n

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

\n
\n\n

我提交了一份错误报告,标题为VoiceOver:accessibilityLabel 无法在 UIMenuItem 元素上实现,参考号为FB7623526

\n\n

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

\n