有没有办法确定VoiceOver当前是否正在宣布以及何时停止.我已经尝试过UIAccessibilityVoiceOverStatusChanged,但我的理解是,只有当你打开或关闭VoiceOver时才会这样.任何帮助将不胜感激.谢谢.
我想让VoiceOver在HTML span元素中说出除指定文本内容之外的其他内容:
<span tabindex="0" class="myClassName" id="DateLabel" role="heading">1:02a</span>
Run Code Online (Sandbox Code Playgroud)
考虑一下我可能希望VoiceOver说出全文文本的情况.
当我添加aria-label属性时,VoiceOver仍在阅读文本,尽管IE和Chrome等桌面浏览器正在读取aria-label.
当我添加aria-labelledby属性加上隐藏的aria标签元素时,我能够让VoiceOver读取备用旁白,而不是文本内容.但是,我发现这只有在aria-role是按钮或链接等小部件角色时才有效.这很糟糕,因为我不想向用户暗示这是他们可以激活的交互元素.VoiceOver恼人地将"按钮"添加到叙述序列的末尾.我更喜欢使用像"标题"这样的结构角色,但是VoiceOver只是恢复阅读文本内容而不是阅读隐藏的叙述.
请帮忙!我一直在反对这一点,但我根本无法忍受iOS的非标准ARIA实现.我不明白为什么他们必须与桌面浏览器不同,因为它们很简单,但它们在很多地方,我找不到一个好的文档,概述了任何地方的确切行为.
我使用Qt 5.6创建了一个QtQuick应用程序.我在所有QML文本和按钮中添加了辅助功能.可访问性功能在Windows上使用JAWS 17.0屏幕阅读器正常工作.但是,如果我使用OS 10.10在Mac上运行同一项目,同时使用VoiceOver进行屏幕阅读,则每次默认情况下焦点仍保留在按钮上,并且键盘导航不起作用.
如果我在VoiceOver设置中进行更改以关注鼠标移动,则焦点会正确更改.
有没有办法改变VoiceOver for Qt项目的这种行为?
在此先感谢您的帮助
在我目前正在处理的应用程序中,有一个嵌套的集合视图设置.外部集合视图包含可垂直滚动的大单元格,每个单元格包含另一个具有较小单元格的集合视图(子集合视图中的布局不同,这就是为什么有多个单元格).
在视觉上,一切正常,但我遇到了Voice Over的一个问题:当我到达第一个子集合视图中的最后一个项目(即外部集合视图的第一个单元格的最后一项)时,我不能通过滑动选择下一个项目.相反,iOS会将声音视为最后一个项目.
我可以用三指滑动向下滚动,然后选择下一个元素,但这显然不是必需的.选择最后一个元素并按相反顺序返回可以按预期工作.
只有当一个单元格(外部集合视图)最初可见时,才会出现这个问题.如果可以看到多个单元格,一切正常.但是,我无法更改外部单元格的大小,因为这会完全改变布局.
我在下面创建了一个示例视图控制器来演示该问题.除了单元格的大小之外,项目中的两个集合视图是相同的.具有较小单元格的第一个集合视图按预期工作.第二个没有(当选择下一个单元格时,iOS会在选择最后一个可见单元格时播放"嘟嘟"声,即使有更多单元格进一步向下).
所以,我的问题是:
我到目前为止尝试的解决方案:
编辑:演示此问题的ViewController的完整代码:
class ViewController: UIViewController, UICollectionViewDataSource {
let outerCollectionView = UICollectionView(frame: CGRect(x: 0, y: 40, width: 320, height: 250), collectionViewLayout: UICollectionViewFlowLayout())
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .green
outerCollectionView.backgroundColor = .blue
(outerCollectionView.collectionViewLayout as! UICollectionViewFlowLayout).itemSize = CGSize(width: 250, height: 300)
outerCollectionView.register(OuterCell.self, forCellWithReuseIdentifier: "outerCell")
view.addSubview(outerCollectionView)
outerCollectionView.dataSource = self
}
func numberOfSections(in collectionView: UICollectionView) -> Int { return 1 }
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { …Run Code Online (Sandbox Code Playgroud) 我有一个作为父母的链接display: flex,所有孩子都有不同的 css 顺序。
使用 NVDA 当焦点在链接上时,屏幕阅读器会按照 DOM 顺序读取所有内容。
在带有 VoiceOver 的 Mac 上,屏幕阅读器遵循屏幕上的顺序,而不是 DOM 顺序。
我该如何解决?
a {
display: flex;
}
div {
order: 0;
}
h2 {
order: 1;
}Run Code Online (Sandbox Code Playgroud)
<a href="#">
<h2>Title</h2>
<div>
<span>€ 300</span>
</div>
</a>Run Code Online (Sandbox Code Playgroud)
在 Windows 上,在焦点上我得到:标题 300 欧元
在 Mac 上,在焦点上我得到:300 欧元标题
我正在我公司的网站上进行一些可访问性测试。我一直在使用 Mac 的 VoiceOver 工具和 Chrome 进行大部分屏幕阅读器测试。在大多数情况下,它已经起作用了,但是,今天我向自定义元素(主要使用 div 构建)添加了一些 ARIA 标签和角色,并且它似乎只在 Safari 中有效......
有没有其他人遇到过这个问题?关于是否有修复或解决方法的任何想法,以便它可以在任何浏览器上运行?
如果我的场景不够清楚,请告诉我,我会提供更多信息/细节。谢谢!
accessibility google-chrome screen-readers voiceover wai-aria
iOS 上的 VoiceOver 是我遇到的唯一一个似乎无法element.focus()正确处理锚点和 JavaScript功能的屏幕阅读器。
查看我的博客。在那里你会看到经典的skip to content-link 和一个scroll to top-button。该链接是一个常规锚点,其目标是具有 id 的 div main。该按钮会触发动画,但由于这对盲人没有理想的效果,我还让它将焦点移到了skip to content链接上。在 VoiceOver 开启时双击上述任一控件。焦点不会移动。我在 Safari、Firefox、Google Chrome 和 iSource 的 iOS 应用程序中对此进行了测试。
现在转到任何其他设备,无论是 android 手机还是 windows 计算机。打开屏幕阅读器。据我所知,它始终有效(使用 Microsoft Edge、Google Chrome 和 Internet Explorer 进行测试)。
锚点的 HTML:
<a href="#main" id="top-link">Skip to content</a>
<!-- ... -->
<div id="main" role="main">
<!-- ... -->
</div>
Run Code Online (Sandbox Code Playgroud)
按钮的 JS: document.getElementById('scroll-to-top').addEventListener('click', function() { document.getElementById('top-link').focus(); }); …
我有一个具有此布局的视图控制器(请注意,黄色视图和表格视图是同级视图):
\n\n我希望黄色视图充当容器,所以我在以下位置执行此操作viewDidLoad:
yellowView.isAccessibilityElement = true\nview.accessibilityElements = [yellowView!, tableView!]\nRun Code Online (Sandbox Code Playgroud)\n在 Voice Over 中,我从辅助功能转子中选择“Containers”,并期望能够上下滑动以从黄色视图移动到表格视图并再次返回:
\n黄色(向下滑动) \xe2\x86\x92 TableView(向下滑动) \xe2\x86\x92 Tabbar(向上滑动) \xe2\x86\x92 tableView(向上滑动) \xe2\x86\x92 黄色
\n然而,情况并非如此 - 在tableView获得焦点后,向上滑动不会将焦点移动到黄色视图,它只是停在那里。向下滑动,移动到选项卡栏 - 似乎我的自定义视图被忽略为容器。
我尝试了许多添加超级视图并isAccessibilityElement = false对其进行设置的组合,但似乎没有任何效果。
有人知道如何解决这个问题吗?
\n我的屏幕上有一个按钮。当用户点击该按钮时,我的应用程序会打开一个模式(视图)。当用户关闭该视图时,辅助功能 VoiceOver 的焦点将转到屏幕顶部。在 UIKit 中,我可以使用UIAccessibility.post(notification:argument:)将.layoutChanged传递到notification参数中,并将对我的视图之一的引用传递到argument参数中。我怎样才能在 SwiftUI 中实现同样的行为?
概述:
我很难理解如何在与 IOS 13+ 兼容的SwiftUI 视图中以编程方式正确转移辅助功能焦点。
不幸的是,这意味着无法使用 IOS 15+ 中提供的较新的 SwiftUI 焦点管理 API。
我看到的大多数建议与以下帖子类似:
它建议使用UIAccessibility.post(notification: .screenChanged/layoutChanged) argument: View)来更改焦点
然而,我的尝试没有成功。
我已经能够以与下面的代码相同的方式成功使用UIAccessibility.post(notification: .announcement) argument: String),并且它确实按预期宣布了刺痛。它花费的时间比 asyncAfter 计时器要长得多(可能需要 8 秒),但它似乎表明 post() 调用正在工作。
代码示例:
自定义展开/折叠,带有 V 形向上或向下,具体取决于它是展开还是折叠。
我希望能够以编程方式控制焦点扩展时的位置。例如,我可能希望能够让 VoiceOver 聚焦在打开的扩展菜单中的“菜单项 3”上。
我认为接近下面代码的东西可能会起作用,但我对帖子中的参数视图如何工作缺乏了解,并且不确定是否有办法使用 SwiftUI 视图,或者我是否需要创建一个UIKit 视图并使用 UIViewRepresentable 或使用 UIHostingController 包装它?
目前的行为
展开菜单时,VoiceOver 会移至第一项。当菜单折叠时,VoiceOver 焦点将转移到最后一个文本视图。
期望的行为
我希望能够在展开菜单时明确决定 VoiceOver 焦点的位置,并能够在视图出现时将更多焦点集中到特定视图
我还考虑了使用 SwiftUI/IOS 13+ 中提供的工具的其他方法。例如,我使用accessibility(sortPriority:)和accessibilityElement(children: .combine/.contain/.ignore)来达到预期的结果,但这些努力也被证明是不成功的。
代码搜索:
以下 GitHub 搜索目前分别产生 10 和 13 个结果:
在这些结果中,SwiftUI 视图中使用的结果使用了“nil”参数(据说将焦点转移到屏幕上的第一项)
这让我怀疑我是否真的偏离了轨道。 …