【发布时间】:2020-05-03 08:10:41
【问题描述】:
我有一个 SwiftUI 列表,如下面的示例代码所示。
struct ContentView: View {
@State var numbers = ["1", "2", "3"]
@State var editMode = EditMode.inactive
var body: some View {
NavigationView {
List {
ForEach(numbers, id: \.self) { number in
Text(number)
}
.onMove {
self.numbers.move(fromOffsets: $0, toOffset: $1)
}
}
.navigationBarItems(trailing: EditButton())
}
}
}
当我进入编辑模式并将项目向上移动一个位置时,在我放下项目后会发生奇怪的动画(参见下面的 gif)。看起来被拖动的项目回到原来的位置,然后再次移动到目的地(带动画)
有趣的是,如果您将项目向下拖动或向上拖动多个位置,则不会发生这种情况。
我猜这是因为 List 在状态中的项目重新排序时执行动画,即使它们已经通过拖放在视图端重新排序。但显然它在所有情况下都能很好地处理它,除了将项目向上移动一个位置。
关于如何解决这个问题的任何想法?或者它可能是一个已知的错误?
我使用的是 XCode 11.4.1,构建目标是 iOS 13.4
(还请注意,在“现实世界”应用程序中,我使用的是 Core Data,当移动项目时,它们的顺序在数据库中更新,然后状态也更新,但动画问题看起来完全一样。 )
【问题讨论】:
标签: ios swift swiftui swiftui-list