首页 > 解决方案 > 平移时,VoiceOver 无法访问超级视图边界之外的视图

问题描述

在我的应用程序中,我有一些控件是 a 的子视图,UIView但它们的框架超出了父视图的范围。它们对有视力的用户可见,clipsToBounds因为false. 对于 VoiceOver 用户,他们可以突出显示其超级视图边界内的控件,然后向右滑动以突出显示边界外的下一个控件。这按预期工作。但如果他们改为点击并在屏幕上平移,VoiceOver 永远不会突出显示其超级视图边界之外的元素。如何确保在平移时可以访问这些元素?

我创建了一个遇到此问题的示例项目。这里有两个按钮作为子视图添加到灰色UIView. 按钮 0 位于其父视图的范围内,按钮 1 位于外部。平移时可以访问按钮 0,而不能访问按钮 1。

在此处输入图像描述

标签: iosvoiceoveruiaccessibility

解决方案


似乎可访问性框架用于UIView.point(inside:_, with:_)确定是否可以通过 VoiceOver 访问视图。

我通过在超级视图上覆盖此函数并true在该点超出超级视图边界但在子视图边界内时返回解决了这个问题。

在这种特殊情况下,我的超级视图有一个在超级视图边界之外绘制的背景视图,而我希望 VoiceOver 可以访问的视图位于该背景视图的边界之内。所以我有:

override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
    return background.frame.contains(point)
}

根据您的情况进行调整。


推荐阅读