首页 文章

在平移时,VoiceOver无法访问超级视图范围外的视图

提问于
浏览
1

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

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

enter image description here

1 回答

  • 0

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

    我通过在superview上覆盖此函数并在该点超出superview 's bounds but inside the subview's界限时返回 true 来解决此问题 .

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

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

    根据您的方案进行适当调整 .

相关问题