UIView 对象可以自动组合其子级的辅助功能属性吗?

问题描述 投票:0回答:1

我的视图层次结构如下:

UIView
  \-- UIStackView
    +-- UILabel
    \-- UILabel

默认情况下,VoiceOver 会跳过

UIView
并分别在每个
UILabel
上停止。

我希望 VoiceOver 停在

UIView
上并合并其内容(即一一阅读其每个可访问子项的可访问性标签)。 UIKit 是否提供类似于 SwiftUI 的 accessibilityElement(children: .combine) API 的 API 来实现此目的?

注释

  1. 我知道我可以将
    isAccessibilityElement
    上的
    true
    设置为
    UIView
    ,然后将其
    accessibilityLabel
    设置为
    "\(label1.text!) \(label2.text!)"
    。我想知道是否有一种自动方法可以实现此目的,不需要我定义
    UIView
    accessibilityLabel
  2. 必须根据其子项手动定义
    UIView
    accessibilityLabel
    的问题是,我必须记住在更改
    UIView
     的每个地方更改 
    accessibilityLabel
    text
     accessibilityLabel
    其任何子代。
uikit voiceover
1个回答
1
投票

UIKit 不提供像 SwiftUI 的 accessibilityElement(children: .combine) 这样的 API,用于将所有非隐藏子级的辅助功能标签自动合并到父级中。我已经在反馈助手中提交了对此的建议,尽管我怀疑它是否会出现。

正如 Apple 开发者论坛中的 Apple 框架工程师所建议的那样,解决方法是,只要任何子视图中的文本通过位于父视图和子视图之间的堆栈视图发生更改,就更新父视图的辅助功能标签,如下: parentView.accessibilityLabel = stackView.arrangedSubviews .map { $0.accessibilityLabel ?? "" } .joined(separator: " ")

© www.soinside.com 2019 - 2024. All rights reserved.