Код: Выделить всё
var body: some View {
List(locations, id: \.id) { location in
NavigationLink(value: location) {
LocationRowView(location: location)
}
}
.navigationDestination(for: Location.self) { location in
LocationView(location: location)
}
.listStyle(.plain)
}
Код: Выделить всё
struct LocationView: View {
var location: Location
@State private var position: MapCameraPosition = .automatic
private var locationCoordinate: CLLocationCoordinate2D {
CLLocationCoordinate2D(latitude: location.address.latitude, longitude: location.address.longitude)
}
private var locationRegion: MKCoordinateRegion {
MKCoordinateRegion(center: locationCoordinate, span: MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05))
}
private var locationPosition: MapCameraPosition {
MapCameraPosition.region(locationRegion)
}
var body: some View {
VStack {
Map(position: $position) {
Marker("", coordinate: locationCoordinate)
}
}.navigationBarTitleDisplayMode(.inline)
.onAppear {
position = locationPosition
}
}
}
Код, который я написал, должен центрировать карту по переданным координатам местоположения, что он делает в первый раз, вводя модификатор .onAppear, но этого не происходит при последующих выборе местоположения.
Если я удалю вызов .onAppear и просто оставлю позицию как .automatic, то последующие выборы будут перемещать карту и показывать новую булавку, если только я не взаимодействовал с карту любым способом (масштабирование, панорамирование и т. д.)
Подробнее здесь: https://stackoverflow.com/questions/785 ... ng-a-new-i