使用 `accessibilityLabel` 和 `accessibilityHint` 在 iOS 中正确实现 VoiceOver 辅助功能

Correct implementation of VoiceOver accessibility in iOS with `accessibilityLabel` and `accessibilityHint`

我正在尝试优化我的应用程序。使用 accessibilityLabelaccessibilityHint 在 iOS 中实现可访问性的最佳实践方法是什么?是否始终需要无障碍标签?

我的应用程序非常动态,视图中的对象会根据用户的操作频繁更新。例如,一个视图可能以一种形状开始,然后变成另一种形状。因此,每个对象的 accessibilityLabelaccessibilityHint 会频繁更新,以反映打开 VoiceOver 的用户的更改视图。


Questions

  1. Is it safe to expect that when VoiceOver is not running (i.e. !UIAccessibilityIsVoiceOverRunning()) then setting accessibilityLabel and accessibilityHint is completely unnecessary?

  2. Are there assistive technologies other than VoiceOver that a user might use that access accessibilityLabel and accessibilityHint?

What is the best practice method for implementing accessibility in iOS with accessibilityLabel and accessibilityHint?

您应该考虑覆盖 属性 实现,而不是 "setting" 可访问性标签。允许需要可访问性标签的视图在需要时计算其值,而不是始终保持值同步。容易多了!您可以使用如下所示的代码来执行此操作。

override public var accessibilityLabel: String? {
    get {
        return "Calculated label"
    }
    set {
       //Specifically do nothing. We're not "setting a property" we're responding to changes of the internal views.
    }
}

Are accessibility labels always required?

是也不是。对于呈现信息和可单独聚焦的元素,始终需要辅助功能标签(您可能有一组 f 控件,包裹在一个布局中,带有一个辅助功能标签)。我可以相当肯定地说,在您问题的上下文中,删除可访问性标签绝对是不正确的做法。

Is it safe to expect that when VoiceOver is not running (i.e. !UIAccessibilityIsVoiceOverRunning()) then setting accessibilityLabel and accessibilityHint is completely unnecessary?

不,辅助功能属性在 VoiceOver 之外还有其他用途。

Are there assistive technologies other than VoiceOver that a user might use that access accessibilityLabel and accessibilityHint?

当然还有 VoiceOver 之外的辅助技术,它们依赖于无数的辅助功能属性。 (盲文板、开关访问等)

Conclusion

在我看来,您正试图将可访问性作为一种软件实践来解决,并使这样做合理化。这是错误的思维过程。但是,由于某些基本的设计问题,使您可以访问的视图可能确实不切实际。您应该考虑您所拥有的东西的设计方式是否可以从 development/API 的角度访问它。 API 确实会限制您完成某些事情。您是否遇到这些限制之一不是您可以在 Whosebug 上提出的问题,解决方案是不要忽略可访问性信息。它是重新设计控件,或者可能提供替代的可访问实现……尽管应该非常仔细地考虑这条路线。总的来说分开是不相等的。