ios - VoiceOver 页面公告不正确

标签 ios swift accessibility voiceover

打开 VoiceOver 后,当用户用三个手指滑动滚动时,会播报当前页面,例如:“第 1 页,共 3 页”。然而,这些公告并不总是正确的。

下面的代码创建了一个 ScrollView 并用三个标签填充它(用不同的背景颜色来区分它们):

let scrollView = UIScrollView()
scrollView.frame = view.bounds
view.addSubview(scrollView)

let colours: [UIColor] = [.red, .blue, .green]
var lastView: UIView?

for colour in colours {
    let label = UILabel()
    label.frame.size = scrollView.frame.size
    label.backgroundColor = colour
    label.textColor = .white
    label.text = "\(colours.firstIndex(of: colour)!)"
    label.textAlignment = .center

    scrollView.addSubview(label)

    label.frame.origin.y = lastView?.frame.maxY ?? 0

    lastView = label
}

scrollView.contentSize.height = lastView!.frame.maxY        

当我滚动时(如上所述),会发出以下通知:

  • 第 1 页,共 4 页
  • 第 2 页,共 4 页
  • 第 4 页,共 4 页
  • 第 4 页,共 4 页

我做错了什么或者这是 iOS 中的错误?如果是后者,我是否可以应用任何解决方法来确保公布正确的页码?

最佳答案

正如您在评论中提到的,我误解了您的问题。

Is there something I'm doing wrong or is this a bug in iOS?

您没有做错:系统会计算用三指垂直滑动滚动内容所需的总页数,并且它不必与您的标签编号相匹配。

看一下您的代码在下面提供的显示的彩色标签: enter image description here 每次滑动都不会在其整个高度和宽度上显示标签,这就是为什么您的页面多于标签数量的原因:这绝对不是错误,这就是它的工作方式

... is there any workaround I can apply to ensure the correct page numbers are announced?

但是,如果这是您愿意达到的目标,我建议您查看 custom scrolling这可能会有所帮助(我从未使用过它,但这是我看到的针对您的目标的唯一查询方式)

因此,很遗憾,对于您提到的问题,没有解决方法,因为即使是原生 iOS 应用程序,它也经常发生。

查看 iPhone 上最右侧的带有小部件的页面,并聆听宣布的页码:第一个宣布对我来说总是错误的(5 页,而只有 3 页)

第一个通知/阅读有时是错误的,但在一些三指垂直滑动之后,系统纠正了它的初始错误,正如我在插图中指出的那样。

这对用户来说不是一个完美的情况,但目前,您无法做任何更好的事情,除非点燃蜡烛以尽快解决此问题。

关于ios - VoiceOver 页面公告不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56591572/

相关文章:

ios - 将 Starscream 与 Poloniex WAMP API 结合使用的问题

ios - iOS 上的可访问时间标签

html - a11y : Input fields, 包裹在 div 中,附加 "by id"到标签

ios - 如何将值从 Collection View 传递到 TableView

ios - 单击时如何更改标签中的字母?

html - 使复选框和单选标签可点击

iphone - 我们可以一次使用排序描述符和@distinctUnionOfObjects吗?

ios - 快速解析 Alamofire 中的错误

ios - YTPlayerView 控件设置不影响全屏模式

iOS 动画 - View 应该在 super View 之外