微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 开始,答案是不可能。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。