コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
Place Search コンポーネント
Places UI キットの Place Search コンポーネントは、場所検索の結果をリストにレンダリングします。
場所検索のリストはカスタマイズできます。次の項目を指定できます。
- 表示するコンテンツ
- 縦向きのメディア サイズ
- テキストの切り捨て
- 向き
- ブランドとアプリのデザイン言語に合わせたテーマのオーバーライド
- アトリビューションの位置
- 場所を選択できるかどうか
リクエストをカスタマイズして、Search by text request
または Search Nearby request
を実行することもできます。
課金
SearchByTextRequest()
または PlaceSearchViewRequest()
バインディング値が変更されるたびに、課金されます。
アプリにプレイス検索を追加する
PlaceSearchView class
を使用して Place Search ウィジェットを追加します。
Swift
PlaceSearchView(
orientation: .horizontal, // default is vertical
request: $placeSearchViewRequest,
configuration: configuration
)
アプリでテキスト検索または周辺検索の結果を読み込む場合は、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
)
)
)
コンポーネントの読み込み時、場所の選択時、コンポーネントの読み込みエラー発生時にコールバックを受け取ることもできます。
Swift
.onLoad { places in
print("places: \(places)")
}
.onRequestError { error in
print("error: \(error)")
}
.onPlaceSelected { place in
print("place: \(place)")
}
Place Search コンポーネントをカスタマイズする
コンテンツのカスタマイズ
コンポーネントに表示するコンテンツを指定する必要があります。
この例では、場所の住所と評価を表示するようにコンポーネントを構成します。
Swift
private let configuration = PlaceSearchConfiguration(
content: [.address(), .rating()]
)
プレイス検索コンポーネントに表示されるコンテンツの次の側面を必要に応じてカスタマイズすることもできます。
content
: コンポーネントに表示されるコンテンツ。
mediaSize
: フラグメントの縦向きの写真のサイズ。デフォルトは small です。コンテンツで指定。
preferTruncation
: 各場所の詳細ビューのテキストを切り捨てるかどうか。デフォルトは false です。
theme
: PlacesMaterialTheme から継承するカスタムテーマ。テーマ設定の詳細
attributionPosition
: コンポーネントの上部または下部に Google マップの帰属表示を表示するかどうか。デフォルトは .top です。
selectable
: リスト内の各場所が選択可能かどうか。選択可能な場合、場所が選択された後に onPlaceSelected
クロージャが呼び出されます。デフォルトは false です。
カスタマイズ構成を 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
)
向きをカスタマイズする
デフォルトの向きは縦向きです。PlaceSearchView
で水平方向を指定できます。
Swift
PlaceSearchView(
orientation: .horizontal, // default is vertical
request: $placeSearchViewRequest,
configuration: configuration
)
テーマをカスタマイズする
デフォルトのスタイル属性をオーバーライドするテーマを指定できます。デフォルトは PlacesMaterialTheme
です。テーマ設定について詳しくは、Place Details コンポーネントのドキュメントをご覧ください。
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()
}
}
例
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)")
}
}
}
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-09-04 UTC。
[null,null,["最終更新日 2025-09-04 UTC。"],[],[],null,["Select platform: [Android](/maps/documentation/places/android-sdk/place-search-ui-kit \"View this page for the Android platform docs.\") [iOS](/maps/documentation/places/ios-sdk/place-search-ui-kit \"View this page for the iOS platform docs.\") [JavaScript](/maps/documentation/javascript/places-ui-kit/place-list \"View this page for the JavaScript platform docs.\")\n\n\u003cbr /\u003e\n\nPlace Search component\n======================\n\n\nThe Place Search component of the Places UI Kit renders the results of a place search in a list.\n\n\nYou can customize the Place Search list. You can specify:\n\n- The content to display\n- Media size in vertical orientation\n- Text truncation\n- The orientation\n- Theme overrides that match your brand and app's design language\n- The position of the attribution\n- Whether a place is selectable\n\n\nYou can also customize the request to perform either a [`Search by text request`](/maps/documentation/places/ios-sdk/reference/swift/Structs/SearchByTextRequest) or a [`Search Nearby request`](/maps/documentation/places/ios-sdk/reference/swift/Structs/SearchNearbyRequest).\n\nBilling\n-------\n\n\nYou are billed each time the `SearchByTextRequest()` or `PlaceSearchViewRequest()` binding value is changed.\n\nAdd Place Search to your app\n----------------------------\n\n| **Tip:** [See the complete example](/maps/documentation/places/ios-sdk/place-search-ui-kit#example).\n\n\nAdd the Place Search widget using the `PlaceSearchView class`. \n\n### Swift\n\n```swift\nPlaceSearchView(\n orientation: .horizontal, // default is vertical\n request: $placeSearchViewRequest,\n configuration: configuration\n)\n```\n\n\nWhen you want your app to load a text search or nearby search result, update your `PlaceSearchViewRequest` value. \n\n### Swift\n\n```swift\n// use placeSearchViewRequest = .searchNearby(...) to configure a searchNearby request\n\n @State private var let placeSearchViewRequest = .searchByText(\n SearchByTextRequest(\n textQuery: \"Googleplex\",\n placeProperties: [.all],\n locationBias: CircularCoordinateRegion(\n center: CLLocationCoordinate2D(latitude: 0, longitude: 0),\n radius: 0\n )\n )\n )\n \n```\n\n\nYou can also optionally receive callbacks when the component loads, a place is selected, or when there is an error loading the component. \n\n### Swift\n\n```swift\n.onLoad { places in\n print(\"places: \\(places)\")\n}\n.onRequestError { error in\n print(\"error: \\(error)\")\n}\n.onPlaceSelected { place in\n print(\"place: \\(place)\")\n}\n \n```\n\nCustomize the Place Search component\n------------------------------------\n\n### Customize content\n\nYou must specify which content your component will display. **Note:** The Place name will always appear.\n\n\nThis example configures the component to display the address and rating of the Place. \n\n### Swift\n\n```swift\nprivate let configuration = PlaceSearchConfiguration(\n content: [.address(), .rating()]\n)\n```\n\n\nYou can also optionally customize the following aspects of the content that appears in your Place Search component:\n\n- [`content`](/maps/documentation/places/ios-sdk/reference/swift/Enums/PlaceSearchContent): The content shown in the component.\n- [`mediaSize`](/maps/documentation/places/ios-sdk/reference/swift/Enums/PlaceSearchContent#mediasize:): The photo size in the vertical orientation of the fragment. The default is small. Specified in content.\n- [`preferTruncation`](/maps/documentation/places/ios-sdk/reference/swift/Structs/PlaceSearchConfiguration#prefertruncation): Whether to truncate text of each Place Details view. The default is false.\n- [`theme`](/maps/documentation/places/ios-sdk/reference/swift/Structs/PlaceSearchConfiguration#theme): Your custom theme that inherits from PlacesMaterialTheme. Learn more about theming.\n- [`attributionPosition`](/maps/documentation/places/ios-sdk/reference/swift/Structs/PlaceSearchConfiguration#attributionposition): Whether to show the Google Maps attribution at the top or bottom of the component. The default is .top.\n- [`selectable`](/maps/documentation/places/ios-sdk/reference/swift/Structs/PlaceSearchConfiguration#selectable): Whether each place in the list is selectable. If it is selectable, `onPlaceSelected` closure will be called after a place is selected. The default is false.\n\n\nAdd your customization configuration to [`PlaceSearchConfiguration`](/maps/documentation/places/ios-sdk/reference/swift/Structs/PlaceSearchConfiguration). \n\n### Swift\n\n```swift\nprivate let configuration = PlaceSearchConfiguration(\n content: [.address, .rating, .media(size: .large)],\n preferTruncation: true, // default is false\n theme: PlacesMaterialTheme(),\n attributionPosition: .bottom, // default is top\n selectable: true // default is false\n)\n \n```\n\n### Customize orientation\n\n\nThe default orientation is vertical. You can specify a horizontal orientation in `PlaceSearchView`. \n\n### Swift\n\n```swift\nPlaceSearchView(\n orientation: .horizontal, // default is vertical\n request: $placeSearchViewRequest,\n configuration: configuration\n)\n \n```\n\n### Customize the theme\n\n\nYou can specify a theme that overrides any of the default style attributes. The default is [`PlacesMaterialTheme`](/maps/documentation/places/ios-sdk/reference/swift/Structs/PlacesMaterialTheme). See the [Place Details component documentation](/maps/documentation/places/ios-sdk/place-details-ui-kit#customize-place-details) for more information on theming. \n\n### Swift\n\n```swift\n@Environment(\\.colorScheme) var colorScheme\nvar theme: PlacesMaterialTheme {\n if customTheme {\n var theme = PlacesMaterialTheme()\n var color = PlacesMaterialColor()\n color.surface = (colorScheme == .dark ? .blue : .gray)\n color.outlineDecorative = (colorScheme == .dark ? .white : .black)\n color.onSurface = (colorScheme == .dark ? .yellow : .red)\n color.onSurfaceVariant = (colorScheme == .dark ? .white : .blue)\n color.onSecondaryContainer = (colorScheme == .dark ? .white : .red)\n color.secondaryContainer = (colorScheme == .dark ? .green : .purple)\n color.positive = (colorScheme == .dark ? .yellow : .red)\n color.primary = (colorScheme == .dark ? .yellow : .purple)\n color.info = (colorScheme == .dark ? .yellow : .purple)\n var shape = PlacesMaterialShape()\n shape.cornerRadius = 10\n var font = PlacesMaterialFont()\n font.labelLarge = .system(size: UIFontMetrics.default.scaledValue(for: 18))\n font.headlineMedium = .system(size: UIFontMetrics.default.scaledValue(for: 15))\n font.bodyLarge = .system(size: UIFontMetrics.default.scaledValue(for: 15))\n font.bodyMedium = .system(size: UIFontMetrics.default.scaledValue(for: 12))\n font.bodySmall = .system(size: UIFontMetrics.default.scaledValue(for: 11))\n var attribution = PlacesMaterialAttribution()\n attribution.lightModeColor = .black\n attribution.darkModeColor = .white\n theme.color = color\n theme.shape = shape\n theme.font = font\n theme.attribution = attribution\n } else {\n return PlacesMaterialTheme()\n }\n}\n \n```\n\nExample\n-------\n\n### Swift\n\n```swift\nstruct PlaceSearchDemoView: View {\n private let configuration = PlaceSearchConfiguration(\n content: [.address(), .rating(), .type(), .media(size: .large)],\n preferTruncation: true, // default is false\n theme: PlacesMaterialTheme(),\n attributionPosition: .bottom, // default is top\n selectable: true // default is false\n )\n // can also do let placeSearchViewRequest = .searchNearby(...) to configure a searchNearby request\n @State private var placeSearchViewRequest: PlaceSearchViewRequest = .searchByText(\n SearchByTextRequest(\n textQuery: \"Googleplex\",\n placeProperties: [.all],\n locationBias: CircularCoordinateRegion(\n center: CLLocationCoordinate2D(latitude: 0, longitude: 0),\n radius: 0\n )\n )\n )\n var body: some View {\n PlaceSearchView(\n orientation: .horizontal, // default is vertical\n request: $placeSearchViewRequest,\n configuration: configuration\n )\n .onLoad { places in\n print(\"places: \\(places)\")\n }\n .onRequestError { error in\n print(\"error: \\(error)\")\n }\n .onPlaceSelected { place in\n print(\"place: \\(place)\")\n }\n }\n}\n \n```"]]