Popovers

Select platform: Android iOS JavaScript

Map of San Francisco with marker and popover over the Ferry Building.

A popover displays content (usually text or images) in an info bubble window above the map, at a given location. The popover has a content area and a tapered stem. The tip of the stem is attached to a specified location on the map.

Typically you will attach a popover to a marker using the .popover modifier, but you can also attach a popover to a specific LatLng coordinate with altitude, or offset it from a marker.

Add a popover

To add a popover, create a Popover entity and set its options, including position and altitude mode. The position is a LatLngAltitude object, determining where the popover is displayed. You can control how altitude is interpreted when anchoring by LatLngAltitude by setting the altitude mode. If anchoring to a marker, the marker's position is used instead.

The content of a popover can be customized using SwiftUI Views. You can provide custom layouts by passing a View builder closure to the Popover entity or the .popover modifier.

Add a popover to a LatLngAltitude object

The following code sample adds a popover to a LatLngAltitude object:

import GoogleMaps3D
import SwiftUI

struct SimpleCoordinatePopover: View {
  @State private var isOpen = true
  // Alcatraz Island coordinates
  private let alcatraz = LatLngAltitude(latitude: 37.8270, longitude: -122.4230)

  var body: some View {
    Map(initialCamera: .init(latitude: 37.8270, longitude: -122.4230)) {
      Popover(
        positionAnchor: alcatraz,
        isOpen: $isOpen
      ) {
        Text("Alcatraz Island")
      }
    }
  }
}

Add a popover to a marker

The following code sample adds a popover to a marker:

import GoogleMaps3D
import SwiftUI

struct SimpleMarkerPopover: View {
  @State private var isOpen = false
  // Ferry Building coordinates
  private let ferryBuilding = LatLngAltitude(latitude: 37.7955, longitude: -122.3937)

  var body: some View {
    Map(initialCamera: .init(latitude: 37.7955, longitude: -122.3937)) {
      Marker(position: ferryBuilding)
        .popover(isOpen: $isOpen) {
          Text("Ferry Building")
        }
        .onTap {
          isOpen.toggle()
        }
    }
  }
}