我可以使用 SwiftUI 隐藏 MapKit 中的默认兴趣点,例如公园、餐馆等吗?

xdl*_*123 5 mapkit swiftui

我想使用自己的地图注释,并且试图隐藏地图中的默认注释。

我发现这可以从地图视图中删除每个默认注释

let configuration = MKStandardMapConfiguration()
configuration.pointOfInterestFilter = MKPointOfInterestFilter(including: [])
Run Code Online (Sandbox Code Playgroud)

但如何将此配置应用于 SwiftUI 中的地图视图?

import SwiftUI
import MapKit

@available(iOS 16.0, *)
struct MyMapView: View {
    init (){
        let configuration = MKStandardMapConfiguration()
        configuration.pointOfInterestFilter = MKPointOfInterestFilter(including: [])
    }
    
    @State private var region = MKCoordinateRegion(
        center: CLLocationCoordinate2D(
            latitude: 41.59710,
            longitude: -74.14976),
        span: MKCoordinateSpan(
            latitudeDelta: 0.0125,
            longitudeDelta: 0.0125)
        )
    
    var body: some View {
        Map(coordinateRegion: $region)
            .edgesIgnoringSafeArea(.all)
            .disabled(true)
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 1

SwiftUIMap视图不支持此功能。要获得可以执行此操作的地图,您需要使用MKMapViewwhich is in UIKit。这是如何在 SwiftUI 中使用它的示例

import SwiftUI
import MapKit

struct ContentView: View {
    var body: some View {
        MapView()
            .edgesIgnoringSafeArea(.all)
            .disabled(true)
    }
}

struct MapView: UIViewRepresentable {

    let configuration: MKStandardMapConfiguration

    private var center: CLLocationCoordinate2D {
        CLLocationCoordinate2D(latitude: 41.59710, longitude: -74.14976)
    }

    private var coordinateSpan: MKCoordinateSpan {
        MKCoordinateSpan(latitudeDelta: 0.0125, longitudeDelta: 0.0125)
    }

    init() {
        configuration = MKStandardMapConfiguration()
        configuration.pointOfInterestFilter = MKPointOfInterestFilter(including: [])
    }

    func makeUIView(context: Context) -> MKMapView {
        let mapView = MKMapView()
        mapView.region = MKCoordinateRegion(center: center, span: coordinateSpan)
        mapView.preferredConfiguration = configuration

        return mapView
    }

    func updateUIView(_ uiView: MKMapView, context: Context) { }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Run Code Online (Sandbox Code Playgroud)