MKMapView 阻止注释分组

Sko*_*oua 5 mapkit ios mapkitannotation swift

我有MKMapView几个注释,其中 3 个注释彼此非常接近。

我曾经mapView.showAnnotations(mapView.annotations, animated: false)在启动时显示同一区域上的所有注释,但 3 个注释之一被隐藏,因为它太接近了。

我查看了Apple的文档,但找不到防止这种情况发生的方法,知道如何防止注释分组吗?

(我以前从未见过这个,也许这是iOS 11的功能)

Ger*_*tan 7

您所看到的不是集群(您必须编写代码来获取集群,并且通常会看到集群)

我的实验似乎表明......

  1. MKAnnotationViews从地图的顶部到底部渲染。(北在哪里并不重要)。
  2. 如果MapKit决定绘制重叠MKAnnotationViews,则MKAnnotationView靠近底部的部分将绘制在顶部(因为它是稍后绘制的)
  3. 不仅如此MKAnnotationViews,下面呈现的标题也MKMArkerAnnotationViews需要空间。这些标题的呈现受 的影响markerView.titleVisibility。如果markerView.titleVisibility设置为.visible(而不是默认的.adaptive),则该标题比稍后呈现的 a 更强MarkerAnnotationView,即使后者MarkerAnnotationView具有displayPriority = .required. MarkerAnnotationView靠近底部的部分不被渲染。
  4. 如果MarkerAnnotationView接近顶部的位置较低,甚至会发生这种情况displayPriority。所以aMarkerAnnotationView跟低displayPriority.titleVisibility = .visible可以使aMarkerAnnotationView更接近底部的跟displayPriority = .required消失。

那你该怎么办:

  1. 确保annotationView.displayPriority = .required所有相关注释。(这是必要的,但还不够)
  2. 不要设置annotationView.titleVisibility = .visible否则标题将使渲染靠近底部的注释视图消失。而是设置annotationView.titleVisibility = .adaptive

我认为你无法完全控制可见性。但这个问题让annotationView.titleVisibility = .visible我感到惊讶,你应该避免它,因为它隐藏注释。

如果使用集群,集群的行为就像(并且是)注释,其行为与上述完全相同。

几年后编辑:

iOS 14以来,MKAnnotationView有两个新变量:

设置较高的值以确保更重要的内容MKAnnotationView保持可见。这很好用。

对于具有相同的注释zPriority,上面的文本仍然有效。

请注意,Apple 决定将 的zPriority财产设为 的财产MKAnnotationView,而不是MKAnnotation.

这意味着一旦 MapKit 决定隐藏您最喜欢的MKAnnotationView,您就无法zPriority再设置该变量,因为视图不再退出。我通过zPriority在创建后立即设置来解决这个问题MKAnnotationView。最后一段不在苹果文档中。