accessibilityTextHeadingLevel 应该做什么?

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

在我的 iOS 应用程序中,我使用 UILabels 作为标题;为了方便访问,我将其

accessibilityTraits
设置为
.header
。我认为我可以通过将每个标题和子标题的
attributedText
设置为属性字符串(将
.accessibilityTextHeadingLevel
应用于其整个范围)来使标题和子标题的层次结构清晰,但这似乎不会导致可访问性有任何差异经验。

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

ios accessibility voiceover
2个回答
2
投票

我看到了有关如何设置它的文档,但没有说明它的实际作用。

不幸的是,你是对的......关于其目的没有明确的解释。

但是,据说此属性仅适用于符合 UITextInput 协议的视图,例如 UITextView。

.accessibilityTextHeadingLevel 应该有什么效果?

此密钥背后的基本原理可能是提供与网页中的结构相同的结构。

我不确定这是否相关,但它看起来像是另一个与 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 系列期间没有引入:用一个简单的示例简单提及它就足够了。

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

我为此问题写了一篇开发者技术支持事件 (DTSI #796394403),Apple 回答说:

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

  2. 从技术上讲,UIAccessibilityTextAttributeHeadingLevel 指的是

    h
    值,类似于 HTML 标签
    h1
    h2

最后我得出的结论是:

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

0
投票

Apple 一定已经解决了这个问题,因为当我将

.accessibilityHeading(.h1)
应用于文本组件时,画外音会显示“标题级别 1”。

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