У меня есть TabView с тремя вкладками, одна из которых содержит вид карты, который реализован следующим образом:
struct MapView: UIViewRepresentable {
let region: MKCoordinateRegion
let animatedRegion: Bool
func makeUIView(context: Context) -> MKMapView {
let mapView = MKMapView(frame: .zero)
mapView.delegate = context.coordinator
mapView.showsUserLocation = true
mapView.setRegion(region, animated: animatedRegion)
return mapView
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
func updateUIView(_ mapView: MKMapView, context: Context) {
}
class Coordinator: NSObject, MKMapViewDelegate {
var control: MapView
init(_ control: MapView) {
self.control = control
}
}
}
Вид вкладки реализован так:
TabView(selection: $selection) {
MapView(/* params */)
.tabItem {
Image(systemName: "1.square.fill")
Text("map")
}.tag(1)
Text("Screen #2")
.tabItem {
Image(systemName: "2.square.fill")
Text("2")
}.tag(2)
Text("Screen #3")
.tabItem {
Image(systemName: "3.square.fill")
Text("3")
}.tag(3)
}
проблема в том, что метод makeUIView (: context) выполняется каждый раз, когда я переключаюсь обратно на вкладку карты с одной из двух других вкладок.Похоже, что базовый экземпляр MKMapView освобождается, когда я переключаюсь на другую вкладку, затем он воссоздается, когда я переключаюсь обратно.В UIKit он не перерисовывает весь вид таким образом.Я делаю что-то не так, или я могу что-то сделать, чтобы убедиться, что базовый экземпляр MKMapView сохраняется, когда я переключаюсь назад, чтобы ему не приходилось воссоздавать его каждый раз?