VoiceOver 是不是总是忽略宽度和高度为零的 iOS 视图?

Posted

技术标签:

【中文标题】VoiceOver 是不是总是忽略宽度和高度为零的 iOS 视图?【英文标题】:Does VoiceOver always ignore views with width and height zero iOS?VoiceOver 是否总是忽略宽度和高度为零的 iOS 视图? 【发布时间】:2020-03-13 19:23:48 【问题描述】:

对于 Voice Over 忽略 UILabel 是否足以将其 text 属性设置为 nil 或者是否还需要将 isHidden 属性设置为 true ?

我在一个示例项目中对此进行了测试,发现当文本设置为 nil 时 Voice Over 会忽略标签。我可以一直指望这个吗?在这种情况下,标签的宽度和高度为零,因为我没有添加任何约束。那么我可以假设任何宽度和高度为零的视图都会被 Voice Over 忽略,而不管它是否隐藏?

【问题讨论】:

【参考方案1】:

为了让 VoiceOver 忽略 [UILabel],是否将文本设置为 nil 就足够了,还是我也应该将 isHidden 属性设置为 true?

VoiceOver 忽略元素的适当方式将其isAccessibilityElement 属性设置为false?...您正在使用的元素 ⟹ UILabel 就足够了。 在这种情况下,将其文本设置为 nil 是可行的,但它更像是一个杂物,而不是一个正确的解决方案。

图形元素不应仅在 VoiceOver 运行时消失,因为您的界面应该对每个人都相同:例如,您可能有未受过教育的人可以在有或没有 VoiceOver 的情况下使用您的应用,他们如果他们在两种方式上都没有相同的视觉体验,可能会感到困惑。 ?

我在一个示例项目中对此进行了测试,发现当文本设置为 nil 时 Voice Over 会忽略标签。我可以一直依靠这个吗?

不,您不能,因为它适用于 UILabel,但如果您尝试使用按钮或文本字段执行相同的操作,您会发现它不会工作肯定是因为他们的'accessibilityTraits`。

那么我可以假设任何宽度和高度为零的视图都会被 Voice Over 忽略,无论它是否隐藏?

是的,您可以,因为 width = height = zero 表示此元素不是 VoiceOver 应该分析和读出的图形元素。 但是,即使它有效,我不建议按照此路径将元素隐藏到 VoiceOver,正如我之前解释的那样。 ?

【讨论】:

我刚刚意识到我对问题的一部分措辞有误。我为此道歉。我不是为了画外音而让 UI 元素消失。将在可重用组件中使用的标签图像化,任何使用它的人都可以随时将文本设置为他们想要的任何内容。我只是想确保当文本设置为 nil 时 Voice Over 会忽略标签。因此,您建议的一种方法是将isAccessibilityElement 设置为false。将 isHidden 设置为 true 是否也适用于所有情况? @AnirudhBandi:据我所知,ìsHidden 的属性也达到了这个目标。 ?

以上是关于VoiceOver 是不是总是忽略宽度和高度为零的 iOS 视图?的主要内容,如果未能解决你的问题,请参考以下文章

浮动清除

Android中RelativeLayout中的视图宽度和高度始终为零

如何获得 SVG 组元素的高度/宽度?

UICollectionViewCell 的子视图的宽度和高度为零

检查字符数组是不是为零的快速方法[重复]

检查字节数组是不是全为零的最快方法