我浏览了Google Maps docs,说明似乎没什么帮助。
我关注使用markerInfoContents
的旧版tutorial但是,当我使用该代表时,它并没有返回我的预期。
使用markerInfoContents
:我的自定义视图似乎会覆盖默认视图
当我使用markerInfoWindow
时,结果符合我的预期:
我只是从xib文件中提取自定义UIView,如下所示:
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
}
}
(对于第一张图片结果,将markerInfoWindow
替换为markerInfoContents
)
使用markerInfoContents
,它会创建框的锚点和阴影效果。使用markerInfoWindow
时,它不会像教程中那样创建锚点或阴影效果。
任何帮助都会很棒!
答案 0 :(得分:1)
正如发布的文档链接中所提到的,当使用markerInfoContents
时:“如果此方法返回一个视图,它将被放置在默认信息窗口框架内。”,因此您的视图被限制在默认窗口内(这就是为什么它显示锚和阴影)。看起来默认的infowindow小于你的xib的UIView形式,所以它会截断它。
使用markerInfoWindow
会显示您直接传递的视图,因此如果它没有锚点或阴影,则不会显示。
答案 1 :(得分:0)
如果你想使用默认的阴影效果和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
}
}