iOS: Google Maps API - markerInfoWindow vs markerInfoContents

为君一笑 提交于 2019-12-20 10:53:50

问题


I looked through the Google Maps docs and the description does not seem to help much.

I'm following an old tutorial that made use of markerInfoContents however, when I used the delegate it didn't return what I expected.

With markerInfoContents: My custom view seems to override the default view

When I used markerInfoWindow, the results were what I expected:

I am simply pulling in a custom UIView from a xib file like so:

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
    }
}

(Replace markerInfoWindow with markerInfoContents for the first image results)

With markerInfoContents it created the anchor and the shadow effect of the box. When using markerInfoWindow it does not create that anchor or shadow effect like in the tutorial.

Any help would be great!


回答1:


As mentioned in the documentation link posted, when using markerInfoContents: "If this method returns a view, it will be placed within the default info window frame.", so your view is constrained within the default window (that's why it shows the anchor and shadow). It looks like the default infowindow is smaller than the UIView form your xib, so it truncates it.

The use of markerInfoWindow shows the view you pass directly, so if it does not have the anchor or shadow, it will not appear.




回答2:


If you want to use the default shadow effect and the anchor with markerInfoContents then you have to do it like this:

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
    }
}


来源:https://stackoverflow.com/questions/44223716/ios-google-maps-api-markerinfowindow-vs-markerinfocontents

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!