MapKit - iOS 13 - 如何将标注针固定在用户位置标注上方?

9

目前,当我尝试在用户位置添加注释到地图时,注释没有显示出来。 当我将注释设置在用户位置旁边(使用相同的代码)时,它确实显示出来。

代码:

let annotation = MKPointAnnotation()
annotation.coordinate = coordinate // set coordinate
annotation.title = "Title"
annotation.subtitle = "Subtitle"
mapView.addAnnotation(annotation)

请提供更多关于这段代码的上下文。 - Kosuke Ogawa
1
我正在尝试让用户在地图上的自己位置添加一个注释标记。 当标记靠近用户位置的蓝点时,地图会隐藏该标记。 有没有办法改变这种行为? 在iOS 12上这个功能运行良好。 - gabguy
嗨,gabguy,你有找到任何解决方案吗? - Manish
5个回答

5

我这里也遇到了同样的问题,iOS 12的时候还好好的,现在所有靠近当前位置标记的注释都不可见了。重要的信息可能会在用户位置附近,需要进行展示。当你缩小地图的时候,这种情况就更糟糕了,因为你不知道是否有数据,因为所有注释都靠近用户位置...

是否有文档显示了苹果公司的这一变化?我没有找到... 感谢提供查找结果的人。

如果没有关闭这种行为的选项,我唯一能想到的解决方法是手动添加当前位置标注...


使用MKPinAnnotationView代替MKAnnotationView已经解决了我的问题。 - Manish

1
在回调函数 -mapView:viewForAnnotation 中,确保你返回的 MKAnnotationView 保留其默认的 displayPriority 值,即 MKFeatureDisplayPriorityRequired,否则 MapKit 会将你的注释视图与用户位置聚合。

1
这对我有效。现在它被称为 MKFeatureDisplayPriority.required - Tony

1
我有一个解决问题的方法。我在我的生产应用程序中也遇到了问题,因为我只是将注释添加到地图上,从未调用viewForAnnoation方法。我创建了一个示例项目并将其上传到Github,以便您可以查看代码并了解我所做的事情。简而言之,您需要创建一个NSObject子类,并符合MKAnnotation协议。如果像我的项目一样使用MKLocalsearch,请传回MKMapItem对象并创建新类的新实例。您还需要创建一个类并将其子类化为MKMarkerAnnotationView。
    class CustomMKMarkerSubclass: MKMarkerAnnotationView {
    override var annotation: MKAnnotation? {
        willSet {
            if let _ = newValue as? MapLocation {
                displayPriority = MKFeatureDisplayPriority.required
                canShowCallout = true
            }
        }
    }
}

更多详情请查看下面的项目。

地图演示项目


0

看起来iOS 14修复了这个问题


0

使用MKPinAnnotationView代替MKAnnotationView解决了我的问题

- (MKAnnotationView *)mapView:(MKMapView *)tempMapView viewForAnnotation:(id <MKAnnotation>)tempAnnotation{
     if ([tempAnnotation isKindOfClass:[MKUserLocation class]]){
         return nil;
     }
     NSString *identifer = @"Identifer";
     MKPinAnnotationView *dPV = [[MKPinAnnotationView alloc] initWithAnnotation:tempAnnotation reuseIdentifier:identifer];
     [dPV setSelected:YES];
     [dPV setTag:102];
     dPV.canShowCallout = YES;
     [dPV setSelected:YES];
     dPV.draggable = YES;
     return dPV;}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接