SwiftUI .onAppear не вызывается на iPad в NavigationStack при выборе нового элемента для отображенияIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 SwiftUI .onAppear не вызывается на iPad в NavigationStack при выборе нового элемента для отображения

Сообщение Anonymous »

Я создаю приложение, которое показывает список мест на выбор, а затем выводит подробное представление этого места с картой, показывающей это местоположение. Когда я использую этот код на iPhone, все работает так, как ожидалось, однако когда я использую его на iPad, метод onAppear, который я использую для установки региона и закрепления карты, никогда не вызывается для последующих местоположений. Я предполагаю, что это как-то связано с тем, что детали всегда на экране.

Код: Выделить всё

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
}
}
}
Чтобы внести ясность, когда я запускаю этот код на iPad, я получаю боковую панель со списком местоположений и пустой экран с подробными сведениями позади нее, как и ожидалось. Когда я выбираю местоположение, я получаю подробный экран, показывающий карту с отметкой выбранного местоположения. Теперь ошибка заключается в том, что когда я выбираю другое место, булавка перемещается, но карта остается в центре первого местоположения, хотя я ожидал, что карта также переместится и новая булавка будет центрирована.
Код, который я написал, должен центрировать карту по переданным координатам местоположения, что он делает в первый раз, вводя модификатор .onAppear, но этого не происходит при последующих выборе местоположения.
Если я удалю вызов .onAppear и просто оставлю позицию как .automatic, то последующие выборы будут перемещать карту и показывать новую булавку, если только я не взаимодействовал с карту любым способом (масштабирование, панорамирование и т. д.)

Подробнее здесь: https://stackoverflow.com/questions/785 ... ng-a-new-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • SwiftUI .onAppear не вызывается на iPad в NavigationStack при выборе нового элемента для отображения
    Anonymous » » в форуме IOS
    0 Ответы
    70 Просмотры
    Последнее сообщение Anonymous
  • .onAppear не вызывается для элементов моего списка после использования элемента управления обновлением
    Гость » » в форуме IOS
    0 Ответы
    35 Просмотры
    Последнее сообщение Гость
  • SwiftUI Navigation Путь инициализации стека с onAppear не отображает правильный экран
    Anonymous » » в форуме IOS
    0 Ответы
    57 Просмотры
    Последнее сообщение Anonymous
  • SwiftUI .onAppear не обновляет переменную @State возвращаемым значением
    Anonymous » » в форуме IOS
    0 Ответы
    47 Просмотры
    Последнее сообщение Anonymous
  • Как реализовать такую ​​функцию, как onAppear, в SwiftUI?
    Anonymous » » в форуме IOS
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»