Проблема при интеграции пользовательского интерфейса поиска Mapbox по умолчанию в SwiftUI

#swift #swiftui #mapbox #mapbox-ios

#swift #swiftui #mapbox #mapbox-ios

Вопрос:

Недавно я попытался интегрировать пользовательский интерфейс поиска Mapbox по умолчанию в свой проект. Мой проект в основном основан на SwiftUI, а в примере использования на веб-сайте Mapbox используется UIKit. Я пытался обернуть UIKit в код SwiftUI. Вот что я написал в SearchController, который соответствовал протоколу ‘UIViewControllerRepresentable’:

     struct Search: UIViewControllerRepresentable, LocationProvider {
        let userCoordinate = CLLocationCoordinate2D(latitude: 37.785834, longitude: -122.406417)
        
        /// `LocationProvider` protocol implementation
        func currentLocation() -> CLLocationCoordinate2D? { userCoordinate }
        
        func makeUIViewController(context: UIViewControllerRepresentableContext<Search>) -> MapboxPanelController {
            let searchController = MapboxSearchController(locationProvider: self)
            
            // default panel
            let panelController = MapboxPanelController(rootViewController: searchController)
            
            searchController.delegate = context.coordinator
            
            return panelController
        }
        
        func updateUIViewController(_ uiViewController: MapboxPanelController, context: UIViewControllerRepresentableContext<Search>) {
        }
    ...
   }
  

И представление родительского содержимого, которое я написал:

 ...
var body: some View {
    VStack{
        ZStack {
            NavigationMap()
            Search(annotations: $annotations, position: $position)
        }
    }
}
...
  

NavigationMap () — это MapView, который я создаю в другом файле. В основном, что я пытался сделать здесь, это добавить PanelController по умолчанию с помощью Mapbox в качестве дочернего представления NavigationMap. Но в результате я больше не могу взаимодействовать с NavigationMap. Похоже, что SearchController полностью покрывает NavigationMap даже с PanelController, который позволяет перетаскивать панель вверх и вниз. Я не могу понять, что я сделал не так. Вот исходный документ, предоставленный Mapbox:

    class SimpleUISearchViewController: UIViewController, LocationProvider {
 
        lazy var searchController = MapboxSearchController(locationProvider: self)
 
        /// `LocationProvider` protocol implementation
        func currentLocation() -> CLLocationCoordinate2D? { mapboxSFOfficeCoordinate }
 
        lazy var panelController = MapboxPanelController(rootViewController: searchController)
 
        let mapView = MGLMapView()
 
        let mapboxSFOfficeCoordinate = CLLocationCoordinate2D(latitude: 37.7911551, longitude: -122.3966103)
 
        override func viewDidLoad() {
            super.viewDidLoad()
 
            /// Add MGLMapView on the screen
            mapView.frame = view.bounds
            mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
            mapView.showsUserLocation = true
 
            mapView.setCenter(mapboxSFOfficeCoordinate, zoomLevel: 15, animated: false)
            view.addSubview(mapView)
 
            searchController.delegate = self
            addChild(panelController)
        }
        ...
   }
  

Я не уверен, почему я неправильно реализовал SwiftUI или предоставленный им документ по умолчанию не может полностью поддерживать SwiftUI. Может ли кто-нибудь помочь мне с этим? Я ценю это.