You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Maps SDK for iOS v2.6.0时地图标记缺失问题求助

问题解决:Google Maps iOS 标记不显示的原因及修复方案

嘿,我一眼就瞅出问题所在啦!你代码里的逻辑顺序搞反了,导致标记被“弄丢”了。

问题根源

你先创建了GMSMarker并把它关联到当前的mapView上,但紧接着你又重新初始化了一个全新的GMSMapView实例,还把当前的view替换成了这个新的地图视图。这就意味着,你之前添加了标记的那个旧mapView已经被丢弃了,新的地图视图里当然没有任何标记啦!

修正后的代码

你需要把创建地图视图的代码移到添加标记之前,或者确保只初始化一次地图视图。这里提供两种修复方式:

方式一:在addMarker中仅初始化一次地图视图

func addMarker(lat: Double, lng: Double) { 
    // 只有当mapView还未初始化时,才创建新的地图视图
    if mapView == nil {
        let camera = GMSCameraPosition.camera(withLatitude: lat, longitude: lng, zoom: 15.0) 
        mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera) 
        view = mapView 
    }
    
    // 现在添加标记到已存在的mapView上
    let marker = GMSMarker(position: CLLocationCoordinate2D(latitude: lat, longitude: lng)) 
    marker.title = "Orlando" 
    marker.snippet = "Florida" 
    marker.map = mapView 
    
    print("addMarker(lat:\(lat), lng:\(lng))") 
}

方式二:提前在viewDidLoad中初始化地图视图(更推荐)

如果你的地图视图应该在页面加载时就存在,那最好把初始化逻辑放到viewDidLoad里,addMarker只负责添加标记:

override func viewDidLoad() {
    super.viewDidLoad()
    // 初始化地图视图(这里用Orlando的默认坐标)
    let initialCamera = GMSCameraPosition.camera(withLatitude: 28.5383, longitude: -81.3792, zoom: 15.0) 
    mapView = GMSMapView.map(withFrame: CGRect.zero, camera: initialCamera)
    view = mapView
}

func addMarker(lat: Double, lng: Double) { 
    let marker = GMSMarker(position: CLLocationCoordinate2D(latitude: lat, longitude: lng)) 
    marker.title = "Orlando" 
    marker.snippet = "Florida" 
    marker.map = mapView 
    
    print("addMarker(lat:\(lat), lng:\(lng))") 
}

为什么这样改?

这样调整后,标记会被添加到同一个已显示在屏幕上的地图视图中,而不是被加到一个马上就被丢弃的临时地图实例里。你之前的打印语句能输出,说明函数确实执行了,但标记因为地图视图被替换而丢失了。

内容的提问来源于stack exchange,提问作者es0329

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:42:11