使用 `accessibilityLabel` 和 `accessibilityHint` 在 iOS 中正确实现 VoiceOver 辅助功能
Correct implementation of VoiceOver accessibility in iOS with `accessibilityLabel` and `accessibilityHint`
我正在尝试优化我的应用程序。使用 accessibilityLabel
和 accessibilityHint
在 iOS 中实现可访问性的最佳实践方法是什么?是否始终需要无障碍标签?
我的应用程序非常动态,视图中的对象会根据用户的操作频繁更新。例如,一个视图可能以一种形状开始,然后变成另一种形状。因此,每个对象的 accessibilityLabel
和 accessibilityHint
会频繁更新,以反映打开 VoiceOver 的用户的更改视图。
Questions
Is it safe to expect that when VoiceOver is not running (i.e. !UIAccessibilityIsVoiceOverRunning()
) then setting
accessibilityLabel
and accessibilityHint
is completely
unnecessary?
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 上提出的问题,解决方案是不要忽略可访问性信息。它是重新设计控件,或者可能提供替代的可访问实现……尽管应该非常仔细地考虑这条路线。总的来说分开是不相等的。
我正在尝试优化我的应用程序。使用 accessibilityLabel
和 accessibilityHint
在 iOS 中实现可访问性的最佳实践方法是什么?是否始终需要无障碍标签?
我的应用程序非常动态,视图中的对象会根据用户的操作频繁更新。例如,一个视图可能以一种形状开始,然后变成另一种形状。因此,每个对象的 accessibilityLabel
和 accessibilityHint
会频繁更新,以反映打开 VoiceOver 的用户的更改视图。
Questions
Is it safe to expect that when VoiceOver is not running (i.e.
!UIAccessibilityIsVoiceOverRunning()
) then settingaccessibilityLabel
andaccessibilityHint
is completely unnecessary?Are there assistive technologies other than VoiceOver that a user might use that access
accessibilityLabel
andaccessibilityHint
?
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 上提出的问题,解决方案是不要忽略可访问性信息。它是重新设计控件,或者可能提供替代的可访问实现……尽管应该非常仔细地考虑这条路线。总的来说分开是不相等的。