防止 UIButton showsTouchWhenHighlighted 改变 VoiceOver 描述

Prevent UIButton showsTouchWhenHighlighted from altering VoiceOver description

设置 showsTouchWhenHighlighted,例如通过 IB 选项“在突出显示时显示触摸”,在没有标题的按钮上将改变 VoiceOver 描述。阅读辅助功能标签后,VoiceOver 会发出哔哔声并播报图像说明。有没有办法禁用此行为?

设置accessibilityContainerType = UIAccessibilityContainerTypeSemanticGroup.

accessibilityContainerType 值设置为 UIAccessibilityContainerTypeSemanticGroup 可行,这很好,但我不确定 这是这个元素的目标。
即使我将按钮视为容器,我也理解此实例 属性 处理 data-based containers 相反。

我调查了你的问题,这引起了我的好奇,但不幸的是,在 Apple API 上找不到合适的解决方案。

首先,我认为 可能会有所帮助,但它并没有像您在评论中提到的那样起作用...谢谢。

显然,当使用 showsTouchWhenHighlighted 属性 时,在按钮内部添加了一个渲染发光触摸的视图 ⟹ 这是一个 UIButtonBarPressedIndicator 图像例如,您可以通过 Xcode 中的调试层次结构进行检测。

即使您已经以编程方式更改了此新图像,但它似乎将按钮图像的可访问性特征 属性 的默认值设置为默认值。

所以,为了避免 VoiceOver 使用屏幕识别并读出一些无用的信息,我做了一些非常丑陋但有效的东西来达到你在 viewDidAppear 中的目标,例如 (看到这个 link):

的 'basic operations' sheet
myButton.subviews.forEach{[=10=].accessibilityTraits = .none}

由于本机实现问题或任何人都可以理解的简单代码行导致的错误破解,此解决方案从按钮中删除了所有可能的 VoiceOver 屏幕识别 ... 并且如果您能稍微解释一下您的解决方案有效的原因,我仍然很感兴趣。