【问题标题】:Set accessibilityLabel on UIMenuItem在 UIMenuItem 上设置accessibilityLabel
【发布时间】:2016-07-07 17:56:51
【问题描述】:

我正在尝试设置UIMenuItemaccessibilityLabel,它似乎没有效果。无论如何,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 元素没有影响。 ?

    【讨论】:

      猜你喜欢
      • 2019-06-08
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多