相关疑难解决方法(0)

在列表顶部插入项目时如何保持 LazyVStack / VStack 中的滚动位置

我创建了一个简单的垂直列表,其中包含要显示的项目。

问题是当我通过 . 在列表顶部插入项目时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)

ios swift swiftui

7
推荐指数
1
解决办法
1944
查看次数

如何从 SwiftUI 中的列表获取屏幕行?

我试图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 中仅提供索引的列表中获得可见行?

希望有人能指引我到正确的地方。非常感谢!

ios swift swiftui swiftui-list

3
推荐指数
1
解决办法
1133
查看次数

标签 统计

ios ×2

swift ×2

swiftui ×2

swiftui-list ×1