打开 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?
您没有做错:系统会计算用三指垂直滑动滚动内容所需的总页数,并且它不必与您的标签编号相匹配。
看一下您的代码在下面提供的显示的彩色标签: 每次滑动都不会在其整个高度和宽度上显示标签,这就是为什么您的页面多于标签数量的原因:这绝对不是错误,这就是它的工作方式。
... 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/