【问题标题】:Not getting right coordinates for UIAccessibilityElement没有获得 UIAccessibilityElement 的正确坐标
【发布时间】:2018-05-09 17:57:25
【问题描述】:

我正在尝试使用我的标签对我的按钮进行分组,但没有在正确的位置获得可访问性的矩形。

一直滑动到元素后,它需要正确的宽度和高度,但 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]

任何帮助将不胜感激。

【问题讨论】:

    标签: ios swift uiaccessibility


    【解决方案1】:

    我遇到了同样的问题,我有一个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
        }
    }
    

    【讨论】:

      【解决方案2】:

      调试后我发现我犯了什么错误。上面提到的所有更改都在 ViewDidLoad 中,到那时我们还没有得到正确的帧。

      所以我在 viewDidLayoutSubviews 中进行了这些更改,现在得到了正确的框架。

      【讨论】:

        猜你喜欢
        • 2022-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-16
        • 1970-01-01
        相关资源
        最近更新 更多