NavigationStack: пункт назначения не обновляется при удалении пути во время анимации
В моем приложении я использую настраиваемую панель навигации, которая, помимо других функций, позволяет пользователю вернуться назад. Я использую NavigationStack с массивом с перечислениями в качестве пути. При переходе назад я просто удаляю последний элемент пути. Это работает хорошо, пока кнопка для перехода назад не нажата, а стек навигации еще не перемещается назад, т.е. не работает быстрое нажатие кнопки «Назад» 2+ раза. В этом случае NavigationStack отображает не пункт назначения верхнего пути, а предыдущий.
Простой пример, показывающий такое поведение:
struct ContentView: View {
@State var navigationPath: [Int] = []
var body: some View {
VStack {
if !navigationPath.isEmpty {
Button {
navigationPath.removeLast()
} label: {
Text("Remove Last")
}
}
NavigationStack(path: $navigationPath) {
NavigationLink(value: 1) {
Text("Navigate to \(1)")
}
.navigationDestination(for: Int.self) { value in
NavigationLink(value: value+1) {
Text("Navigate to \(value+1)")
}
.toolbar(.hidden, for: .navigationBar)
}
}.onChange(of: navigationPath) { newValue in
print("Path: \(newValue)")
}
}
}
}
При нажатии на ссылку навигации два раза (значение 2 -> отображается переход к значению 3), а затем два щелчка (значение 0) на кнопке «Назад», я ожидаю, что начальная страница будет показана снова. Но пока панель навигации реагирует как ожидание (кнопка исчезает). Он по-прежнему будет показывать «Перейти к значению 2». Массив путей обновляется правильно.