我正在尝试设置UIMenuItem
的accessibilityLabel
,但似乎没有效果。无论如何,旁白都只是读取项目的标题:
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 元素没有影响。 😥