iOS:Google Maps API - markerInfoWindow vs markerInfoContents

问题描述:

我翻遍了Google Maps docs,这个描述似乎没有什么帮助。iOS:Google Maps API - markerInfoWindow vs markerInfoContents

我正在关注使用markerInfoContents的旧tutorial,但是,当我使用委托时,它没有返回我所期望的。

随着markerInfoContents:我的自定义视图似乎覆盖默认视图

enter image description here

当我用markerInfoWindow,结果是我所期待的:

enter image description here

我只是拉在一个自定义的UIView从一个像这样的xib文件中:

func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? { 
    let placeMarker = marker as! PlaceMarker 
    print(placeMarker.name) 

    if let infoView = UIView.viewFromNibName(name: "MarkerInfoView") as? MarkerInfoView { 
     infoView.nameLabel.text = placeMarker.name 

     return infoView 
    } else { 
     return nil 
    } 
} 

(与markerInfoContents第一图像结果替换markerInfoWindow)同markerInfoContents它创建的锚定件和盒子的阴影效果。当使用markerInfoWindow时,它不会像本教程中那样创建锚或阴影效果。

任何帮助将是伟大的!

+0

西蒙你好,请注明答案是否能解决你的问题,谢谢。 – Efren

正如在发布的文档链接中提到的,当使用markerInfoContents时:“如果此方法返回一个视图,它将被放置在默认信息窗口框架内。”,因此您的视图被限制在默认窗口内(这就是为什么它显示锚和阴影)。它看起来像默认的infowindow比你的xib的UIView小,所以它截断它。

使用markerInfoWindow显示您直接传递的视图,所以如果它没有锚或阴影,它将不会出现。

如果你想使用默认的阴影效果,并与markerInfoContents锚,那么你必须做这样的:

func mapView(_ mapView: GMSMapView, markerInfoContents marker: GMSMarker) -> UIView? 
{ 
    let placeMarker = marker as! PlaceMarker 
    let view = UIView(frame: CGRect.init(x: 0, y: 0, width: 150, height: 150)) 
    if let infoView = UIView.viewFromNibName(name: "MarkerInfoView") as? MarkerInfoView 
    { 
     infoView.nameLabel.text = placeMarker.name 
     view.addSubview(infoView!) 
     return view 
    } else { 
     return nil 
    } 
}