MKAnnotationView 自定义标注对辅助功能VoiceOver不可见

问题描述

我有一个 MKAnnotationView 子类,并将其中几个放在 MKMapView 上。 MKAnnotationView 子类设置了一些可访问性元素,如下所示:

func applyAccessibility() {
    
    self.isAccessibilityElement = true
    self.accessibilityTraits = [.none]
    
    self.accessibilityLabel = "Bus stop map pin"
    self.accessibilityValue = busstop.name
}

VoiceOver 读出固定在地图上的公交车站的名称

然后我使用 UIView 子类作为点击公交车站时的标注视图。

func mapView(_ mapView: MKMapView,didSelect view: MKAnnotationView) {
    
    if let annotation = view.annotation
    {
        if annotation is MKUserLocation
        {
            // This is our location marker
            return
        }
        
        busstopAnnotationCalloutView.setupForAnnotationView(view,delegate: self)
        
        view.addSubview(busstopAnnotationCalloutView)
        
        mapView.setCenter(annotation.coordinate,animated: true)
    }
}

这很好用,但是这个标注视图对 VoiceOver 完全不可见。

在我设置的标注视图的 init 中:

isAccessibilityElement = true
accessibilityTraits = .none
accessibilityLabel = "Callout view"
accessibilityIdentifier = "BusstopAnnotationCalloutView.callout"

它还创建了自己的标签一个按钮,我设置了类似这样的按钮:

label.isAccessibilityElement = true
label.accessibilityTraits = .header
label.accessibilityLabel = "\(busstop.name)"

界面按钮

button.isAccessibilityElement = true
button.accessibilityTraits = .button
button.accessibilityLabel = "Select this bus stop"

但这些元素都对 VoiceOver 不可见。 Accessibility Inspector 看不到它们。

当我使用 Accessibility Inspector 在视图中移动时,它只会拾取地图上标注下方的 MKAnnotation

编辑--------

我创建了一个小示例项目,它有一个无法访问的自定义标注视图。

Example project

还有一个简短的屏幕录像显示了问题:

Video thumbnail


on YouTube

解决方法

在直接向 Apple 提出 Developer Technical Support 请求后,他们认为这是一个错误,但是由于这在我测试过的任何 iOS 版本上都不起作用,我认为这更像是一种疏忽而不是一个错误,我很惊讶没有其他人想让地图视图标注可访问。

Apple DTS 还问我是否希望他们寻找解决方法,几天后他们回来说根本没有!

所以现在,从 iOS 12.4 开始,答案是不可能。