我有一个电子邮件客户端应用程序,我正在改变我们显示电子邮件附件的方式 . 以前我们在可滚动列表中将它们放在电子邮件查看器的顶部;现在我们正在移动它们,以便它们显示为电子邮件内容底部的列表 . 由于与UIWebView控件相关的原因,我有必要将这些附件实现为HTML代码,这些代码以编程方式附加到原始电子邮件的HTML中(而不是像普通人那样执行它们,其中每个附件只是一个UIView in iOS版) .

我现在正在尝试为这些HTML元素配置可访问性并遇到一些问题 . 每个“附件”由按钮式背景组成,实际上由3个图像构成:一个用于按钮的左侧,一个用于按钮的右侧,中间部分是可伸缩的(这允许按钮到拉伸宽度而不扭曲边缘) . 还有一个纸夹图像和一个右箭头图像放在“按钮”上,还有两个子DIV用于显示文件名及其大小 .

问题在于我想让包含所有这些子元素的外部DIV成为Voiceover唯一可以关注的东西,我希望能够控制画外音为这个DIV宣布的内容(这样我可以包括文件名,大小,是否由文件名重新公布)以及显示文件名和文件大小的两个子DIV . 如果我通过设置 aria-hidden="true" 隐藏了画外音中的所有这些子元素,那么根本没有任何焦点 . 如果我在外部DIV上设置 aria-hidden="false" ,则DIV仍然没有聚焦 .

是否有任何方法可以使Voiceover成为可转移的焦点,即使它不包含Voiceover会专注于其自身的任何内部HTML内容?我想我可以破解一个解决方案,我在DIV上拉伸一个完全透明的PNG并使其成为唯一一个带有aria-hidden =“false”的内部元素,但即便如此,我也不确定如何让Voiceover读取除了文件的名称 .

Update: 好的,似乎我可以通过在我的DIV上添加 role="button" 同时保留所有子元素 aria-hidden="true" 来实现这一点 . 整个DIV现在都是可以关注的,但它仍然宣称自己是"button"(我希望它可以说是"attachment"而不是类型,但如果需要我可以使用"button") . The main problem I'm now encountering is that Voiceover seems to ignore the aria-label property, and instead reads out any text that is contained in my sub-DIVs. Is there any way I can get Voiceover to read the aria-label property that I explicity set instead?