我的视图层次结构如下:
UIView
\-- UIStackView
+-- UILabel
\-- UILabel
默认情况下,VoiceOver 会跳过
UIView
并分别在每个 UILabel
上停止。
我希望 VoiceOver 停在
UIView
上并合并其内容(即一一阅读其每个可访问子项的可访问性标签)。 UIKit 是否提供类似于 SwiftUI 的 accessibilityElement(children: .combine) API 的 API 来实现此目的?
isAccessibilityElement
上的 true
设置为 UIView
,然后将其 accessibilityLabel
设置为 "\(label1.text!) \(label2.text!)"
。我想知道是否有一种自动方法可以实现此目的,不需要我定义 UIView
的 accessibilityLabel
。UIView
的 accessibilityLabel
的问题是,我必须记住在更改 UIView
或 的每个地方更改
accessibilityLabel
的
text
accessibilityLabel
其任何子代。UIKit 不提供像 SwiftUI 的 accessibilityElement(children: .combine) 这样的 API,用于将所有非隐藏子级的辅助功能标签自动合并到父级中。我已经在反馈助手中提交了对此的建议,尽管我怀疑它是否会出现。
正如 Apple 开发者论坛中的 Apple 框架工程师所建议的那样,解决方法是,只要任何子视图中的文本通过位于父视图和子视图之间的堆栈视图发生更改,就更新父视图的辅助功能标签,如下:
parentView.accessibilityLabel = stackView.arrangedSubviews
.map { $0.accessibilityLabel ?? "" }
.joined(separator: " ")