Ios 在列表顶部插入项目时,如何在LazyVStack/VStack中保持滚动位置
我创建了一个简单的垂直列表,其中包含要显示的项目 问题是当我通过Ios 在列表顶部插入项目时,如何在LazyVStack/VStack中保持滚动位置,ios,swift,swiftui,Ios,Swift,Swiftui,我创建了一个简单的垂直列表,其中包含要显示的项目 问题是当我通过insertAtTop()在列表顶部插入项目时。滚动视图不会停留在同一位置 请看视频: 如何使滚动视图保持在相同的位置 下面是示例代码 struct TestView: View { @State private var items: [Item] = [] var body: some View { NavigationView { ScrollView
insertAtTop()
在列表顶部插入项目时。滚动视图不会停留在同一位置
请看视频:
如何使滚动视图保持在相同的位置 下面是示例代码
struct TestView: View {
@State private var items: [Item] = []
var body: some View {
NavigationView {
ScrollView {
LazyVStack {
ForEach(items, id: \._id) { item in
Text(item.text)
.background(Color.green)
.padding(.bottom, 10)
}
}
}
.navigationBarItems(trailing: HStack {
Button("[Insert at top]", action: {
insertAtTop()
})
Spacer(minLength: 20)
Button("[Load]", action: {
load()
})
})
.navigationTitle("Item List")
}
}
private func load() {
items = (1...50).map { _ in Item() }
}
private func insertAtTop() {
let newItems = (1...20).map { _ in Item() }
items.insert(contentsOf: newItems, at: 0)
}
}
struct TestView_Previews: PreviewProvider {
static var previews: some View {
TestView()
}
}
struct Item {
var _id = UUID()
var text = UUID().uuidString.prefix(5)
}
事实上,它保持了滚动位置,但改变了内容,正如我假设的,你想改变滚动位置以保留以前可见的内容。是的,这就是我想要解决的问题。正如您所提到的,滚动偏移量实际上没有改变,但内容大小已经改变。我可以用UITableView解决这个问题,方法是在重新加载数据后设置偏移量。你在@nRewik找到这个问题了吗?我在这里遇到了类似的问题: