我有一个
MKMapView
有几个注释,其中 3 个非常接近。
我使用
mapView.showAnnotations(mapView.annotations, animated: false)
在启动时显示同一区域的所有注释,但 3 个中的一个被隐藏了,因为它太近了。
我查看了 Apple 的文档,但找不到防止这种情况发生的方法,知道如何防止注释分组吗?
(我以前从未见过这个,也许这是iOS 11的功能)
你看到的不是集群(你必须编写代码来获得一个集群,你通常会看到一个集群)
我的实验似乎表明……
MKAnnotationViews
从地图的上到下呈现。 (无论北方在哪里)。MapKit
决定绘制重叠MKAnnotationViews
,那么靠近底部的MKAnnotationView
被绘制在上面(因为它是稍后绘制的)MKAnnotationViews
,下面呈现的标题MKMArkerAnnotationViews
也需要空间。这些标题的呈现受markerView.titleVisibility
的影响。如果markerView.titleVisibility
设置为.visible
(而不是默认的.adaptive
),那么这个标题比后面渲染的MarkerAnnotationView
更强,即使后面的MarkerAnnotationView
有一个displayPriority = .required
。靠近底部的MarkerAnnotationView
没有渲染。MarkerAnnotationView
具有较低的displayPriority
,甚至会发生这种情况。因此,具有低MarkerAnnotationView
和displayPriority
的.titleVisibility = .visible
可以使MarkerAnnotationView
更接近底部而displayPriority = .required
消失。那么你应该怎么做:
annotationView.displayPriority = .required
所有相关注释。 (这是必要的,但还不够)annotationView.titleVisibility = .visible
或标题将使annotationViews消失,呈现在底部附近。而是设置annotationView.titleVisibility = .adaptive
我不认为你可以完全控制能见度。但是
annotationView.titleVisibility = .visible
的问题让我感到惊讶,你应该避免它,因为它 will 隐藏注释。
如果使用集群,集群的行为就像(并且是)注释,其行为与上述完全相同。
编辑,几年后:
自iOS 14,
MKAnnotationView
有两个新变量:
zPriority
https://developer.apple.com/documentation/mapkit/mkannotationview/3547913-zpriorityselectedZPriority
https://developer.apple.com/documentation/mapkit/mkannotationview/3547912-selectedzpriority设置更高的值以确保更重要的
MKAnnotationView
保持可见。这很好用。
对于具有相同
zPriority
的注释,上面的文本仍然有效。
请注意,Apple 决定将
zPriority
设为 MKAnnotationView
的属性,而不是 MKAnnotation
的属性。
这意味着一旦 MapKit 决定隐藏你最喜欢的
MKAnnotationView
,你就不能再设置 zPriority
变量了,因为视图不再退出。我通过在创建 zPriority
后立即设置 MKAnnotationView
来解决这个问题。最后一段不在苹果文档中。