ios - 没有获得 UIAccessibilityElement 的正确坐标

标签 ios swift uiaccessibility

我正在尝试使用我的标签对我的按钮进行分组,但没有在正确的位置获得用于辅助功能的矩形。

一直滑动到元素后,它采用正确的宽度和高度,但 y 位置完全错误。它说的是正确的 VO,但我不知道为什么位置不正确。我有以下代码,

let checkboxAccessible = UIAccessibilityElement(accessibilityContainer: view)
let unionRect = passwordCheckbox.frame.union(showPasswordText.frame)
checkboxAccessible.accessibilityFrame = UIAccessibilityConvertFrameToScreenCoordinates(unionRect, self.view)
checkboxAccessible.accessibilityLabel = NSLocalizedString("Show Password", comment: "showPasswordText")
view.accessibilityElements = [productTitle, leadInText, emailTextField, passwordTextField, checkboxAccessible, loginButton, forgotPasswordView, helpButton]

任何帮助将不胜感激。

最佳答案

我遇到了同样的问题,我有一个 StackView,它有两个 IBOutlets(假设一个 title 和一个 value )。而且我已经苦苦挣扎了几个月,想不通为什么我的容器找不到框架的正确位置(self.frame)。

最近当我回来试图解决这个问题时,我看到了 Apple documenation他们正在使用 union() 函数。我在我的案例中进行了试用,效果非常好!

工作分组元素示例:

class CustomView: UIView {
    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var valueLabel: UILabel!
    
    private var _accessibilityElements: [Any]?
    override var accessibilityElements: [Any]? {
        set {
            _accessibilityElements = newValue
        }
        
        get {
            guard _accessibilityElements == nil else {
                return _accessibilityElements
            }
            
            var elements = [UIAccessibilityElement]()
            
            guard let titleText = titleLabel.text,
                let valueText = valueLabel.text else {
                    return elements
            }
            
            let latitudeElement = UIAccessibilityElement(accessibilityContainer: self)
            latitudeElement.accessibilityLabel = "\(titleText), \(valueText)"
            latitudeElement.accessibilityFrameInContainerSpace = titleLabel.frame.union(valueLabel.frame) // Before: "self.frame"
            elements.append(latitudeElement)
            _accessibilityElements = elements
            
            return _accessibilityElements
        }
    }
    
    func removeAccessibilityElements() {
        _accessibilityElements = nil
    }
}

关于ios - 没有获得 UIAccessibilityElement 的正确坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50259435/

相关文章:

ios - 在 tableViewCell Swift 上点击手势

iphone - 带有文本笔画/轮廓的 UIButton

ios - 在 VoiceOver 打开时设置不同的行为,在带有按钮的堆栈 View 中

ios - 从第 x 页(共第 y 页)调整集合的画外音

ios - 隐藏某些 View 时如何调整 UIView 宽度?

iphone - UIFont Helvetica-Regular字体问题

swift - 强制转换可选值

ios - 如何制作按钮的弹跳效果

ios - UIImageView 上的宽度和高度 NSLayoutConstraints 不起作用

ios - UIAccessibility 在自定义 View 上宣布 n 个元素