问题描述
我有一个 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
。
编辑--------
解决方法
在直接向 Apple 提出 Developer Technical Support
请求后,他们认为这是一个错误,但是由于这在我测试过的任何 iOS 版本上都不起作用,我认为这更像是一种疏忽而不是一个错误,我很惊讶没有其他人想让地图视图标注可访问。
Apple DTS 还问我是否希望他们寻找解决方法,几天后他们回来说根本没有!
所以现在,从 iOS 12.4 开始,答案是不可能。