我有一个滚动视图,其中有许多按钮作为子视图.这些子视图按钮也存储在一个数组中.当我在语音覆盖率模式中使用单击滑动手势从上到下遍历视图中的所有UI元素时,语音翻转仅读取滚动视图中的开始/最后可见 按钮的可访问性标签,然后启动读取视图中的其他UI组件.
该accessibilityScroll委托协议的功能只有当用户那么,用户只用一个水龙头滑动手势通过在视图中的所有UI组件进行导航,这将不会是适合我的情况下滚动视图中进行实际的滚动被调用.
有没有办法可以确定在语音模式下当前正在读取哪个子视图数组按钮,这样我就可以滚动到滚动视图中的特定偏移/按钮位置,使当前偏移的按钮被带入视图,这样它们也可以被读取出来吗?或者是否有更简单的方法来实现我想要的?我很感激你的建议.谢谢
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(); }); …
按下按钮时,是否可以将可访问性焦点(iOS的VoiceOver和Android的Talkback)移至已定义的小部件?
我曾尝试在语义包中进行搜索,但找不到找到这种方法的方法。
使屏幕阅读器从头开始重新启动语义树就足够了。
我有PageView3个页面和一个按钮,可以使用来后退/前进PageController。我想使用按钮(调用_pageController.animateToPage)更改焦点时将焦点移到页面的开头。
我有一个水平滚动的 UICollectionView,其上方有一个标题标签,下方有一个 UIPageControl。
UILabel
UICollectionView
UIPageControl
Run Code Online (Sandbox Code Playgroud)
当我打开 VoiceOver 辅助功能并开始按顺序遍历屏幕时,集合视图会自动滚动到开头或结尾。导致页面突然跳出。例如,如果我使用页面控件滚动到第二页,然后移回集合视图,它会意外显示并读取最后一页。由于我在辅助功能模式下使用页面控件进行导航,因此我想阻止自动滚动。
我该如何预防或应对这种情况?
我发现一个问题似乎描述了相同的问题,但没有解决方法建议:iOS 8.4: Scroll view Resets contentOffset with Voice Over启用视图出现后不久
我在 iOS 13.4.1 iPhone 11 Pro 上遇到过
我有一个具有此布局的视图控制器(请注意,黄色视图和表格视图是同级视图):
\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”参数(据说将焦点转移到屏幕上的第一项)
这让我怀疑我是否真的偏离了轨道。 …
我有一个UITableViewController,我试图自定义节标题看起来更像纯文本.我发现当我向自定义headerView添加子视图(详见下文)时,它会破坏VoiceOver标题导航.
例如:假设我有一个包含三个标题的表:Header1,Header2,Header3.
如果没有viewForHeaderInSection方法的自定义实现,我可以切换画外音转子以按标题导航,一切都按预期工作.
当我以下面的方式实现viewForHeaderInSection方法时,我可以从Header1移动到Header2到Header3并返回到Header2,但是然后画外音丢失所有标题(说"找不到标题").
当我将headerLabel作为子视图添加到headerView时,我发现问题就出现了.我已经尝试将headerLabel设置为隐藏的辅助功能元素,因此画外音不会提取它,但问题仍然存在.
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.frame.size.width,30)];
UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, headerView.frame.size.width-120.0, headerView.frame.size.height)];
headerLabel.textAlignment = UITextAlignmentLeft;
headerLabel.font = [UIFont boldSystemFontOfSize:22];
headerLabel.text = [headersArray objectAtIndex:section];
headerLabel.backgroundColor = [UIColor clearColor];
[headerView addSubview:headerLabel];
return headerView;
}
Run Code Online (Sandbox Code Playgroud)
任何有关VoiceOver如此反应的想法都将受到赞赏.
谢谢.
启用VoiceOver后,用户可以使用3指滑动手势滚动TableView.VoiceOver口头向用户宣布一个短语,表示他们在桌面视图上的位置,即可见的行,例如"第1行到第4行".
我想覆盖这个口头提示并获得画外音,向用户宣布其他内容.
我正在做一些滚动的VoiceOver实验(三指向上/向下滑动手势).
我的测试页面位于:
http://107.170.41.208/AccessibleHTML
Run Code Online (Sandbox Code Playgroud)
有一个带滚动条和大量内容(红色背景)的div,然后是另一个不能滚动的内容很多的内容(黄色背景).
使用鼠标,我可以滚动浏览红色背景内容,但使用VoiceOver会跳过该部分.
如何使用VoiceOver滚动红色部分内容?
voiceover ×10
ios ×9
html ×2
javascript ×2
swiftui ×2
uiscrollview ×2
cocoa-touch ×1
css ×1
flutter ×1
ios5 ×1
swift ×1
tableview ×1
talkback ×1
uikit ×1
uitableview ×1