Ios 如何防止自定义mkAnnotationView恢复为使用默认颜色和图示符图像?
我在UITabBarController的单独选项卡上有几个MKMapViews。每个地图都使用自定义的mkAnnotationView进行MKAnnotations和MKClusterAnnotations。自定义mkAnnotationView为带星形图示符的绿色,如果是群集,则为带数字的绿色 问题是,我的自定义mkAnnotationView正在随机恢复为带有pin标志符号的默认红色外观。当我放大时,视图将开始重新绘制并正确显示。我无法始终如一地重现这个问题,但当我离开一个选项卡然后返回时,它似乎会发生 是否有类似于集合视图上的reloadData()的方法强制在地图视图上重新加载?我的viewForAnnotation func不应该返回零,所以我不知道这是怎么发生的Ios 如何防止自定义mkAnnotationView恢复为使用默认颜色和图示符图像?,ios,mapkit,mkmapview,mkannotation,mkannotationview,Ios,Mapkit,Mkmapview,Mkannotation,Mkannotationview,我在UITabBarController的单独选项卡上有几个MKMapViews。每个地图都使用自定义的mkAnnotationView进行MKAnnotations和MKClusterAnnotations。自定义mkAnnotationView为带星形图示符的绿色,如果是群集,则为带数字的绿色 问题是,我的自定义mkAnnotationView正在随机恢复为带有pin标志符号的默认红色外观。当我放大时,视图将开始重新绘制并正确显示。我无法始终如一地重现这个问题,但当我离开一个选项卡然后返回时
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
var view = mapView.dequeueReusableAnnotationView(withIdentifier: "CustomAnnotationView") as? CustomAnnotationView
if view == nil {
view = CustomAnnotationView(annotation: annotation, reuseIdentifier: "CustomAnnotationView")
} else {
view?.annotation = annotation
}
return view
// code for the cluster annotations redacted
}
问题解决了。一、 显然,需要在集群子类的prepareforuse函数中设置标记的样式
override func prepareForReuse() {
super.prepareForReuse()
style()
}
如果批注为MKUserLocation{return nil}则将
添加到viewFor annotation
方法。@KosukeOgawa感谢您的回复!但是,即使包含该行,问题仍然存在。