Компонент поиска места
Компонент поиска места из комплекта пользовательского интерфейса Places отображает результаты поиска места в виде списка.

Вы можете настроить список поиска мест. Вы можете указать:
- Контент для отображения
- Размер носителя в вертикальной ориентации
- Усечение текста
- Ориентация
- Переопределения тем, соответствующие вашему бренду и языку дизайна приложения
- Позиция атрибуции
- Можно ли выбрать место
Вы также можете настроить запрос так, чтобы он выполнял либо Search by text request
, либо Search Nearby request
.
Биллинг
С вас будет взиматься плата каждый раз, когда изменяется значение привязки SearchByTextRequest()
или PlaceSearchViewRequest()
.
Добавьте поиск места в свое приложение
Добавьте виджет «Поиск места», используя PlaceSearchView class
.
Быстрый
PlaceSearchView( orientation: .horizontal, // default is vertical request: $placeSearchViewRequest, configuration: configuration )
Если вы хотите, чтобы ваше приложение загружало текстовый поиск или результаты поиска поблизости, обновите значение PlaceSearchViewRequest
.
Быстрый
// 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 ) ) )
При желании вы также можете получать обратные вызовы при загрузке компонента, выборе места или при возникновении ошибки при загрузке компонента.
Быстрый
.onLoad { places in print("places: \(places)") } .onRequestError { error in print("error: \(error)") } .onPlaceSelected { place in print("place: \(place)") }
Настройте компонент поиска места
Настроить контент
Вам необходимо указать, какой контент будет отображать ваш компонент.В этом примере компонент настраивается для отображения адреса и рейтинга места.
Быстрый
private let configuration = PlaceSearchConfiguration( content: [.address(), .rating()] )
При желании вы также можете настроить следующие аспекты контента, отображаемого в компоненте поиска места:
-
content
: Содержимое, отображаемое в компоненте. -
mediaSize
: Размер фотографии в вертикальной ориентации фрагмента. Значение по умолчанию — small. Указывается в содержимом. -
preferTruncation
: обрезать ли текст в каждом представлении «Сведения о месте». Значение по умолчанию — false. -
theme
: Ваша собственная тема, наследующая PlacesMaterialTheme. Подробнее о темах. -
attributionPosition
: Отображать ли атрибуцию Google Карт вверху или внизу компонента. Значение по умолчанию — .top. -
selectable
: можно ли выбрать каждое место в списке. Если можно, после выбора места будет вызвано замыканиеonPlaceSelected
. Значение по умолчанию — false.
Добавьте конфигурацию настройки в PlaceSearchConfiguration
.
Быстрый
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 )
Настроить ориентацию
Ориентация по умолчанию — вертикальная. Горизонтальную ориентацию можно указать в PlaceSearchView
.
Быстрый
PlaceSearchView( orientation: .horizontal, // default is vertical request: $placeSearchViewRequest, configuration: configuration )
Настройте тему
Вы можете указать тему, которая переопределяет любой из атрибутов стиля по умолчанию. Значение по умолчанию — PlacesMaterialTheme
. Подробнее о темах см. в документации к компоненту Place Details .
Быстрый
@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() } }
Пример
Быстрый
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)") } } }