Как упоминалось в моем комментарии выше, я считаю, что это ошибка в iOS 13.4
.
Обходным путем может быть использование NavigationLink вне списка и определение строк списка как кнопок, которые
a) установить редактируемое задание (новый @State var selectedTask) и
b) активировать NavigationLink для TaskDetail (task: selectedTask!).
Эта настройка отсоединит выбранная задача с позиции в отсортированном списке, что позволяет избежать неправильного поведения, вызванного повторной сортировкой, которая может быть вызвана редактированием dueDate.
Для этого:
1) добавьте эти две переменные @State структурировать ContentView
@State private var selectedTask: Task?
@State private var linkIsActive = false
2) обновить тело struct ContentView следующим образом
var body: some View {
NavigationView {
ZStack {
NavigationLink(
destination: linkDestination(selectedTask: selectedTask).onAppear(perform: {self.linkIsActive = false},
isActive: self.$linkIsActive) {
EmptyView()
}
List(tasks) { task in
Button(action: {
self.selectedTask = task
self.linkIsActive = true
}) {
NavigationLink(destination: EmptyView()){
Text("\(task.title)")
}
}
}
}
.navigationBarTitle("Tasks").navigationBarItems(trailing: Button("new") {self.addTask()})
}
}
3) добавить следующую структуру в ContentView.swift
struct linkDestination: View {
let selectedTask: Task?
var body: some View {
return Group {
if selectedTask != nil {
TaskDetail(task: selectedTask!)
} else {
EmptyView()
}
}
}
}