我创建了一个简单的垂直列表,其中包含要显示的项目。
问题是当我通过 . 在列表顶部插入项目时insertAtTop()
。滚动视图不会停留在同一个位置。
观看视频: https: //streamable.com/i7ywab
如何使滚动视图保持在同一位置?
这是示例代码。
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() } …
Run Code Online (Sandbox Code Playgroud) 我试图Text
在所有可见行的当前索引列表中为每个可见(在屏幕边界内)行放置一个。
我这里有一个例子。如果我有一个列表一次显示 3 行,并且最初我希望它显示如下:
___|___
A | 0
B | 1
C | 2
-------
Run Code Online (Sandbox Code Playgroud)
如果我向下滚动列表,并且 A 退出屏幕,那么它就像
___|___
B | 0
C | 1
D | 2
-------
Run Code Online (Sandbox Code Playgroud)
知道我该怎么做吗?
此外,我曾经使用UITableView.visibleCells来获取屏幕上的可见单元格,但我在 SwiftUI 中找不到类似的东西。我究竟如何才能在 SwiftUI 中仅提供索引的列表中获得可见行?
希望有人能指引我到正确的地方。非常感谢!