MKMapView 防止注释分组

问题描述 投票:0回答:1

我有一个

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

我使用

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

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

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

ios swift mapkit mapkitannotation
1个回答
7
投票

你看到的不是集群(你必须编写代码来获得一个集群,你通常会看到一个集群)

我的实验似乎表明……

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

那么你应该怎么做:

  1. 确保
    annotationView.displayPriority = .required
    所有相关注释。 (这是必要的,但还不够)
  2. 不要not设置
    annotationView.titleVisibility = .visible
    或标题将使annotationViews消失,呈现在底部附近。而是设置
    annotationView.titleVisibility = .adaptive

我不认为你可以完全控制能见度。但是

annotationView.titleVisibility = .visible
的问题让我感到惊讶,你应该避免它,因为它 will 隐藏注释。

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

编辑,几年后:

iOS 14

MKAnnotationView
有两个新变量:

设置更高的值以确保更重要的

MKAnnotationView
保持可见。这很好用。

对于具有相同

zPriority
的注释,上面的文本仍然有效。

请注意,Apple 决定将

zPriority
设为
MKAnnotationView
的属性,而不是
MKAnnotation
的属性。

这意味着一旦 MapKit 决定隐藏你最喜欢的

MKAnnotationView
,你就不能再设置
zPriority
变量了,因为视图不再退出。我通过在创建
zPriority
后立即设置
MKAnnotationView
来解决这个问题。最后一段不在苹果文档中。

© www.soinside.com 2019 - 2024. All rights reserved.