Komponent Wyszukiwanie miejsc
Komponent Wyszukiwanie miejsc w ramach interfejsu Places UI Kit renderuje wyniki wyszukiwania miejsca w postaci listy.

Możesz dostosować listę wyszukiwania miejsc. Możesz określić:
- treści do wyświetlenia,
- Rozmiar multimediów w orientacji pionowej
- Obcinanie tekstu
- Orientacja
- Zastąpienia motywu, które pasują do Twojej marki i języka projektowania aplikacji.
- Pozycja atrybucji
- Czy miejsce można wybrać
Możesz też dostosować żądanie, aby wykonać Search by text request
lub Search Nearby request
.
Płatności
Opłata jest naliczana za każdym razem, gdy zmieni się wartość powiązania SearchByTextRequest()
lub PlaceSearchViewRequest()
.
Dodawanie wyszukiwania miejsc do aplikacji
Dodaj widżet wyszukiwania miejsc, korzystając z ikony PlaceSearchView class
.
Swift
PlaceSearchView( orientation: .horizontal, // default is vertical request: $placeSearchViewRequest, configuration: configuration )
Jeśli chcesz, aby aplikacja wczytywała wyniki wyszukiwania tekstowego lub wyszukiwania w pobliżu, zaktualizuj wartość PlaceSearchViewRequest
.
Swift
// use placeSearchViewRequest = .searchNearby(...) to configure a searchNearby request @State private var let placeSearchViewRequest = .searchByText( SearchByTextRequest( textQuery: "Googleplex", placeProperties: [.all], locationBias: CircularCoordinateRegion( center: CLLocationCoordinate2D(latitude: 0, longitude: 0), radius: 0 ) ) )
Opcjonalnie możesz też otrzymywać wywołania zwrotne, gdy komponent się wczyta, miejsce zostanie wybrane lub gdy wystąpi błąd wczytywania komponentu.
Swift
.onLoad { places in print("places: \(places)") } .onRequestError { error in print("error: \(error)") } .onPlaceSelected { place in print("place: \(place)") }
Dostosowywanie komponentu Wyszukiwanie miejsc
Dostosowywanie treści
Musisz określić, jakie treści będzie wyświetlać komponent.W tym przykładzie komponent jest skonfigurowany tak, aby wyświetlać adres i ocenę miejsca.
Swift
private let configuration = PlaceSearchConfiguration( content: [.address(), .rating()] )
Możesz też opcjonalnie dostosować te aspekty treści wyświetlanych w komponencie wyszukiwania miejsca:
content
: treść wyświetlana w komponencie.mediaSize
: rozmiar zdjęcia w orientacji pionowej fragmentu. Domyślna wartość to small. Określone w treści.preferTruncation
: czy obcinać tekst w każdym widoku szczegółów miejsca. Wartość domyślna to fałsz.theme
: Twój motyw niestandardowy, który dziedziczy z motywu PlacesMaterialTheme. Więcej informacji o motywachattributionPosition
: określa, czy atrybucja Map Google ma się wyświetlać u góry czy u dołu komponentu. Domyślna wartość to .top.selectable
: czy każde miejsce na liście można wybrać. Jeśli można ją wybrać, po wybraniu miejsca zostanie wywołana funkcjaonPlaceSelected
. Wartość domyślna to fałsz.
Dodaj konfigurację dostosowywania do pliku PlaceSearchConfiguration
.
Swift
private let configuration = PlaceSearchConfiguration( content: [.address, .rating, .media(size: .large)], preferTruncation: true, // default is false theme: PlacesMaterialTheme(), attributionPosition: .bottom, // default is top selectable: true // default is false )
Dostosowywanie orientacji
Domyślna orientacja to pionowa. Możesz określić orientację poziomą w PlaceSearchView
.
Swift
PlaceSearchView( orientation: .horizontal, // default is vertical request: $placeSearchViewRequest, configuration: configuration )
Dostosowywanie motywu
Możesz określić motyw, który zastąpi dowolny z atrybutów stylu domyślnego. Wartość domyślna to PlacesMaterialTheme
. Więcej informacji o motywach znajdziesz w dokumentacji komponentu Szczegóły miejsca.
Swift
@Environment(\.colorScheme) var colorScheme var theme: PlacesMaterialTheme { if customTheme { var theme = PlacesMaterialTheme() var color = PlacesMaterialColor() color.surface = (colorScheme == .dark ? .blue : .gray) color.outlineDecorative = (colorScheme == .dark ? .white : .black) color.onSurface = (colorScheme == .dark ? .yellow : .red) color.onSurfaceVariant = (colorScheme == .dark ? .white : .blue) color.onSecondaryContainer = (colorScheme == .dark ? .white : .red) color.secondaryContainer = (colorScheme == .dark ? .green : .purple) color.positive = (colorScheme == .dark ? .yellow : .red) color.primary = (colorScheme == .dark ? .yellow : .purple) color.info = (colorScheme == .dark ? .yellow : .purple) var shape = PlacesMaterialShape() shape.cornerRadius = 10 var font = PlacesMaterialFont() font.labelLarge = .system(size: UIFontMetrics.default.scaledValue(for: 18)) font.headlineMedium = .system(size: UIFontMetrics.default.scaledValue(for: 15)) font.bodyLarge = .system(size: UIFontMetrics.default.scaledValue(for: 15)) font.bodyMedium = .system(size: UIFontMetrics.default.scaledValue(for: 12)) font.bodySmall = .system(size: UIFontMetrics.default.scaledValue(for: 11)) var attribution = PlacesMaterialAttribution() attribution.lightModeColor = .black attribution.darkModeColor = .white theme.color = color theme.shape = shape theme.font = font theme.attribution = attribution } else { return PlacesMaterialTheme() } }
Przykład
Swift
struct PlaceSearchDemoView: View { private let configuration = PlaceSearchConfiguration( content: [.address(), .rating(), .type(), .media(size: .large)], preferTruncation: true, // default is false theme: PlacesMaterialTheme(), attributionPosition: .bottom, // default is top selectable: true // default is false ) // can also do let placeSearchViewRequest = .searchNearby(...) to configure a searchNearby request @State private var placeSearchViewRequest: PlaceSearchViewRequest = .searchByText( SearchByTextRequest( textQuery: "Googleplex", placeProperties: [.all], locationBias: CircularCoordinateRegion( center: CLLocationCoordinate2D(latitude: 0, longitude: 0), radius: 0 ) ) ) var body: some View { PlaceSearchView( orientation: .horizontal, // default is vertical request: $placeSearchViewRequest, configuration: configuration ) .onLoad { places in print("places: \(places)") } .onRequestError { error in print("error: \(error)") } .onPlaceSelected { place in print("place: \(place)") } } }