ios - 平移时,VoiceOver 无法访问超级视图边界之外的视图
问题描述
在我的应用程序中,我有一些控件是 a 的子视图,UIView
但它们的框架超出了父视图的范围。它们对有视力的用户可见,clipsToBounds
因为false
. 对于 VoiceOver 用户,他们可以突出显示其超级视图边界内的控件,然后向右滑动以突出显示边界外的下一个控件。这按预期工作。但如果他们改为点击并在屏幕上平移,VoiceOver 永远不会突出显示其超级视图边界之外的元素。如何确保在平移时可以访问这些元素?
我创建了一个遇到此问题的示例项目。这里有两个按钮作为子视图添加到灰色UIView
. 按钮 0 位于其父视图的范围内,按钮 1 位于外部。平移时可以访问按钮 0,而不能访问按钮 1。
解决方案
似乎可访问性框架用于UIView.point(inside:_, with:_)
确定是否可以通过 VoiceOver 访问视图。
我通过在超级视图上覆盖此函数并true
在该点超出超级视图边界但在子视图边界内时返回解决了这个问题。
在这种特殊情况下,我的超级视图有一个在超级视图边界之外绘制的背景视图,而我希望 VoiceOver 可以访问的视图位于该背景视图的边界之内。所以我有:
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
return background.frame.contains(point)
}
根据您的情况进行调整。
推荐阅读
- python - 当 sharex=True 时 Pandas 子图丢失数据(错误?) - 添加数据
- excel - 是什么导致整个 ListBox 列为空?
- python - 如何使嵌入矩阵中的某些特定行等于零
- c# - .Net Core 2.x 用户会话意外退出共享主机
- matlab - 在 MATLAB 中从方程中提取变量
- sql - 如何将 SQL 作业失败记录到日志表?
- excel - 为什么即使在我更新以在 64 位系统上使用后,此代码也无法运行?
- wpf - 数据库错误 1054:无法检索订单,因为“字段列表”中的未知列“salesorders.internalcomment”
- javascript - Javascript DOM setAttribute 在函数调用中不起作用
- android - 复选框只能工作一次?