`accessibilityTextHeadingLevel` 究竟应该做什么?

What is `accessibilityTextHeadingLevel ` supposed to do, exactly?

在我的 iOS 应用程序中,我使用 UILabels 作为标题;为了便于访问,我将他们的 accessibilityTraits 设置为 .header。我认为我可以通过将每个 attributedText 设置为一个属性字符串来使 headers 和 subheaders 的层次结构清晰,该字符串将 .accessibilityTextHeadingLevel 应用于其整个范围,但是这似乎不会导致可访问性体验有任何差异。

.accessibilityTextHeadingLevel 应该有什么效果?我看到了关于如何设置它的文档,但没有说明它实际上是什么

I see documentation on how to set it, but nothing saying what it actually does.

不幸的是,你是对的......没有关于其目的的明确解释。‍
但是,声明此属性仅适用于 符合 UITextInput 协议 的视图,例如 UITextView。

What effect is .accessibilityTextHeadingLevel supposed to have?

此密钥背后的基本原理可能是提供与网页中的结构相同的结构。
我不确定这是否相关,但它看起来像是另一个可能很有趣的工具,可以与 VoiceOver 一起使用,即使我不相信它的效率。

要注意此属性的效果,请尝试使用以下代码来收听 “标题级别 x” 当标题行被选中时 在文本视图中。

@IBOutlet weak var myTextView: UITextView!

override func viewDidAppear(_ animated: Bool) {
    
    var myString = AttributedString()
    
    for i in 0...6 {
        
        let titleStr = AttributedString("title \(i)\n\n",
                                        attributes: AttributeContainer([.accessibilityTextHeadingLevel:i]))
        myString.append(titleStr)
    }
    
    myTextView.attributedText = NSAttributedString(myString)
    super.viewDidAppear(animated)
}

这个属性的不明确目标的论点是它在 WWDC 系列中没有被介绍:用一个简单的例子简单地提到它就足够了。

最后,我希望这个 return 能够令人满意地回答您最初的问题,并让您继续在您的应用程序中实现 VoiceOver。

⚠️ 编辑 2022/04/01 ⚠️

我写了一个D开发者T技术S支持I ncident (DTSI no 796394403) 对于这个问题,Apple 回答说:

  1. 目前无法快速到达每个具有此属性的元素(例如转子项目)

  2. 从技术上讲,UIAccessibilityTextAttributeHeadingLevel 引用的 h 值类似于 HTML 标签 h1h2.

最后,我得出的结论是:

  • UITextField 使用此属性没有意义,只有 UITextView 可能与指出某些元素的重要性有关 (只有这 2 objects 符合 UITextInput 协议).
  • 关于直接访问具有此属性的元素没有任何设计(无原生转子项目)
  • 由于必须遵守的协议,.accessibilityTextHeadingLevel 的效果仅依赖于在特定条件下指定文本的标题级别。