首页 > 解决方案 > 可访问性无法在 ios 中更改文本视图的高度约束时正常工作

问题描述

我正在为我的应用程序添加辅助功能支持,并且有一种情况是我将 TextView 的高度约束更改为 0 和 44。我在高度为 0 时禁用辅助功能,反之亦然。但是这样做时,当高度变为 44 时,即使 ; 的可访问性为 ON UITextViewUITextView除非我关闭和打开辅助功能,否则辅助功能光标永远不会指向。

禁用/启用可访问性,隐藏可访问性元素

textView.accessibilityElementsHidden = true

textView.disableAccessibility()

标签: iosvoiceoveruiaccessibility

解决方案


我在一个空白项目中尝试并实现了您的用例,如下所示: 在此处输入图像描述

Button H 0导致 textview 高度为零并禁用 textview 可访问性,同时Button H 44导致 44 textview 高度并启用 textview 可访问性。

对应的代码(Swift 5.0、iOS 12)定义如下:

class SOFViewController: UIViewController {

    @IBOutlet weak var myTextView: UITextView!
    @IBOutlet weak var heightConstraint: NSLayoutConstraint!

    // Action for "BUTTON H O"
    @IBAction func heightIsZero(_ sender: UIButton) {
        heightConstraint.constant = 0
        myTextView.isAccessibilityElement = false
    }

    // Action for "BUTTON H 44"
    @IBAction func heightIsNotZero(_ sender: UIButton) {
        heightConstraint.constant = 44
        myTextView.isAccessibilityElement = true
    }
}

VoiceOver 手势的最终结果如下所示: 在此处输入图像描述

  1. 双击Button H 0以禁用 textview 可访问性并将其高度设置为 0。
  2. 选择下一个元素以检查是否仍然可以在 textview 上获得焦点,尽管它的高度为零。
  3. 双击Button H 44以启用 textview 可访问性并将其高度设置为 44。
  4. 选择上一个元素以检查 textview 是否可以聚焦。
  5. 焦点放在文本视图上,而不打开/关闭 VoiceOver。

根据这个原理,您可以注意到VoiceOver 在更改 iOS 中 textview 的高度约束方面工作正常


推荐阅读