我正在尝试使用我的标签对我的按钮进行分组,但没有在正确的位置获得用于辅助功能的矩形。
一直滑动到元素后,它采用正确的宽度和高度,但 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/