标签: voiceover

iOS确定VoiceOver是否还在说话

有没有办法确定VoiceOver当前是否正在宣布以及何时停止.我已经尝试过UIAccessibilityVoiceOverStatusChanged,但我的理解是,只有当你打开或关闭VoiceOver时才会这样.任何帮助将不胜感激.谢谢.

iphone uikit ios voiceover

7
推荐指数
1
解决办法
1231
查看次数

对于iOS,Safari,VoiceOver,如何让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实现.我不明白为什么他们必须与桌面浏览器不同,因为它们很简单,但它们在很多地方,我找不到一个好的文档,概述了任何地方的确切行为.

accessibility ios voiceover wai-aria

7
推荐指数
2
解决办法
6343
查看次数

OS 10.10中的VoiceOver将默认焦点添加到QtQuick应用程序的按钮

我使用Qt 5.6创建了一个QtQuick应用程序.我在所有QML文本和按钮中添加了辅助功能.可访问性功能在Windows上使用JAWS 17.0屏幕阅读器正常工作.但是,如果我使用OS 10.10在Mac上运行同一项目,同时使用VoiceOver进行屏幕阅读,则每次默认情况下焦点仍保留在按钮上,并且键盘导航不起作用.

如果我在VoiceOver设置中进行更改以关注鼠标移动,则焦点会正确更改.

有没有办法改变VoiceOver for Qt项目的这种行为?

在此先感谢您的帮助

macos qt qml voiceover

7
推荐指数
0
解决办法
178
查看次数

使用VoiceOver可以访问大单元格的嵌套集合视图

在我目前正在处理的应用程序中,有一个嵌套的集合视图设置.外部集合视图包含可垂直滚动的大单元格,每个单元格包含另一个具有较小单元格的集合视图(子集合视图中的布局不同,这就是为什么有多个单元格).

在视觉上,一切正常,但我遇到了Voice Over的一个问题:当我到达第一个子集合视图中的最后一个项目(即外部集合视图的第一个单元格的最后一项)时,我不能通过滑动选择下一个项目.相反,iOS会将声音视为最后一个项目.

我可以用三指滑动向下滚动,然后选择下一个元素,但这显然不是必需的.选择最后一个元素并按相反顺序返回可以按预期工作.

只有当一个单元格(外部集合视图)最初可见时,才会出现这个问题.如果可以看到多个单元格,一切正常.但是,我无法更改外部单元格的大小,因为这会完全改变布局.

我在下面创建了一个示例视图控制器来演示该问题.除了单元格的大小之外,项目中的两个集合视图是相同的.具有较小单元格的第一个集合视图按预期工作.第二个没有(当选择下一个单元格时,iOS会在选择最后一个可见单元格时播放"嘟嘟"声,即使有更多单元格进一步向下).

所以,我的问题是:

  • 如何使第二个集合视图的行为与第一个相同?
  • 如何通过水平滑动访问第二个集合视图中的单元格?

我到目前为止尝试的解决方案:

  • 一篇SO帖子建议为嵌套集合视图创建包装器视图.这似乎没什么区别.
  • 我试图在集合视图的自定义子类中自己实现UIAccessibilityContainer协议.这似乎以奇怪的方式打破滚动.
  • 在随机位置放置"布局已更改"通知,以查看是否有帮助(它没有)

编辑:演示此问题的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)

accessibility ios voiceover uicollectionview

7
推荐指数
1
解决办法
626
查看次数

Flex 订单属性、屏幕阅读器和可访问性

我有一个作为父母的链接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 欧元标题

html css accessibility voiceover flexbox

7
推荐指数
1
解决办法
2376
查看次数

Mac VoiceOver 是否会限制其在 Chrome/Firefox 上的功能?

我正在我公司的网站上进行一些可访问性测试。我一直在使用 Mac 的 VoiceOver 工具和 Chrome 进行大部分屏幕阅读器测试。在大多数情况下,它已经起作用了,但是,今天我向自定义元素(主要使用 div 构建)添加了一些 ARIA 标签和角色,并且它似乎只在 Safari 中有效......

有没有其他人遇到过这个问题?关于是否有修复或解决方法的任何想法,以便它可以在任何浏览器上运行?

如果我的场景不够清楚,请告诉我,我会提供更多信息/细节。谢谢!

accessibility google-chrome screen-readers voiceover wai-aria

7
推荐指数
1
解决办法
1643
查看次数

VoiceOver 不会对锚点做出反应,也不会正确改变对 iOS 的关注

我以前也问过这样的问题,但找到解决方法之前,我无法安心:

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(); }); …

html javascript accessibility ios voiceover

7
推荐指数
1
解决办法
3154
查看次数

如何设置辅助功能容器以使手势正常工作?

我有一个具有此布局的视图控制器(请注意,黄色视图和表格视图是同级视图):

\n

在此输入图像描述

\n

我希望黄色视图充当容器,所以我在以下位置执行此操作viewDidLoad

\n
yellowView.isAccessibilityElement = true\nview.accessibilityElements = [yellowView!, tableView!]\n
Run 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获得焦点后,向上滑动不会将焦点移动到黄色视图,它只是停在那里。向下滑动,移动到选项卡栏 - 似乎我的自定义视图被忽略为容器。

\n

我尝试了许多添加超级视图并isAccessibilityElement = false对其进行设置的组合,但似乎没有任何效果。

\n

有人知道如何解决这个问题吗?

\n

cocoa-touch accessibility ios voiceover uiaccessibility

7
推荐指数
1
解决办法
1980
查看次数

如何在 SwiftUI 中使用 UIAccessibility.post(notification: .layoutChanged, argument: nil) 将焦点移动到特定视图?

我的屏幕上有一个按钮。当用户点击该按钮时,我的应用程序会打开一个模式(视图)。当用户关闭该视图时,辅助功能 VoiceOver 的焦点将转到屏幕顶部。在 UIKit 中,我可以使用UIAccessibility.post(notification:argument:)将.layoutChanged传递到notification参数中,并将对我的视图之一的引用传递到argument参数中。我怎样才能在 SwiftUI 中实现同样的行为?

accessibility ios voiceover swift swiftui

7
推荐指数
1
解决办法
1363
查看次数

ADA - 以编程方式将 VoiceOver 焦点转移到另一个 SwiftUI 视图 - 与 IOS 13+ 兼容

概述:

我很难理解如何在与 IOS 13+ 兼容的SwiftUI 视图中以编程方式正确转移辅助功能焦点。

不幸的是,这意味着无法使用 IOS 15+ 中提供的较新的 SwiftUI 焦点管理 API。

我看到的大多数建议与以下帖子类似:

iOS 更改辅助功能焦点。

它建议使用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 个结果:

https://github.com/search?q=UIAccessibility.post%28notification%3A+.layoutChanged+View+%22import+swiftui%22&type=code

https://github.com/search?q=UIAccessibility.post%28notification%3A+.screenChanged+View+%22import+swiftui%22&type=code

在这些结果中,SwiftUI 视图中使用的结果使用了“nil”参数(据说将焦点转移到屏幕上的第一项)

这让我怀疑我是否真的偏离了轨道。 …

accessibility uikit ios voiceover swiftui

7
推荐指数
1
解决办法
3477
查看次数