如何为 UIControls 组设置单个 VoiceOver

Posted

技术标签:

【中文标题】如何为 UIControls 组设置单个 VoiceOver【英文标题】:How to set single VoiceOver for group of UIControls 【发布时间】:2017-11-01 22:22:18 【问题描述】:

我有一个 UIButton 和一个 UILabel 嵌入在一个 UIStackView 中,在 Interface Builder 中看起来像这样:

通过设置UIStackViewisAccessibilityElementaccessibilityLabel 属性,我能够将UIButtonUILabel 分组到一个VoiceOver 分组中,类似于这样:

但是,使用此配置,UIButton(上图中的灰色圆圈)变得不可点击,使控件无用。

有没有办法保持这种分组,同时仍然允许UIButton 可以点击?

【问题讨论】:

你做了什么来分组按钮和标签? 嗨@DavidRönnqvist,我已经更新了这个问题来回答你的问题。谢谢。 @Marco :要完成 David Rônnqvist 的出色回答,请查看 a11y-guidelines.orange.com/mobile_EN/… 以获取一些代码 sn-ps (Objc + Swift) 处理您的问题。 【参考方案1】:

默认情况下,可访问性元素的accessibilityActivationPoint 是其框架的中点。当按钮和标签组合成一个新元素时,它们组合框架的中点不再在按钮的边界内。

您可以通过覆盖堆栈视图的accessibilityActivationPoint 来解决此问题,以便它返回按钮的激活点。请注意,此属性位于屏幕坐标中,因此如果视图在屏幕上移动(例如滚动),则仅设置一次是不够的。


此外,要使分组元素“表现”得像辅助技术用户的按钮,您应该给它一个按钮的accessibilityTraits。完整列表请见here。

【讨论】:

很棒的答案。

以上是关于如何为 UIControls 组设置单个 VoiceOver的主要内容,如果未能解决你的问题,请参考以下文章

如何为在线程上运行的单个任务设置最大执行时间?

如何为 Laravel ORM 中每个组中的单个项目执行 groupBy()

如何为 QTableView 中的单个单元格设置委托?

如何为单个剑道网格列设置最大宽度属性?

如何为单个 azure blob 请求设置内容处置?

如何为单个 HttpsURLConnections 设置 https.proxyHost 和 https.proxyPort?