在我的 iOS 应用程序中,我使用 UILabels 作为标题;为了方便访问,我将其
accessibilityTraits
设置为 .header
。我认为我可以通过将每个标题和子标题的 attributedText
设置为属性字符串(将 .accessibilityTextHeadingLevel
应用于其整个范围)来使标题和子标题的层次结构清晰,但这似乎不会导致可访问性有任何差异经验。
.accessibilityTextHeadingLevel
应该有什么效果?我看到了有关如何设置它的文档,但没有说明它实际上做什么。
我看到了有关如何设置它的文档,但没有说明它的实际作用。
不幸的是,你是对的......关于其目的没有明确的解释。
但是,据说此属性仅适用于符合 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 回答说:
目前无法快速到达具有此属性的每个元素(例如转子项目)。
从技术上讲,UIAccessibilityTextAttributeHeadingLevel 指的是
值,类似于 HTML 标签h
、h1
。h2
最后我得出的结论是:
UITextField
使用此属性是没有意义的,只有UITextView
可能与指出某些元素的重要性相关(只有这2个对象符合UITextInput
协议)。.accessibilityTextHeadingLevel
的效果仅依赖于在特定条件下指定文本的标题级别,因为它必须遵守协议。Apple 一定已经解决了这个问题,因为当我将
.accessibilityHeading(.h1)
应用于文本组件时,画外音会显示“标题级别 1”。