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

2024-04-18

我想放一个Text对于列表中的每个可见(屏幕边界内)行,其当前索引在所有可见行中。

我这里有一个例子。如果我有一个一次显示 3 行的列表,并且最初我希望它显示如下:

___|___
A  |  0
B  |  1
C  |  2
-------

如果我向下滚动列表,A 走出屏幕,那么就会像

___|___
B  |  0
C  |  1
D  |  2
-------

知道我该怎么做吗?

另外,我以前用过UITableView.visibleCells https://developer.apple.com/documentation/uikit/uitableview/1614896-visiblecells获取屏幕上的可见单元格,但我在 SwiftUI 中找不到类似的东西。我究竟该如何获取列表中仅包含 SwiftUI 中提供的索引的可见行?

希望有人能引导我到正确的地方。多谢!


您可以使用onAppear https://developer.apple.com/documentation/swiftui/text/3276931-onappear and 消失时 https://developer.apple.com/documentation/swiftui/text/3276933-ondisappear函数来维护可见行列表,然后使用它们来查找可见索引。

struct ContentView: View {
    let rows = (Unicode.Scalar("A").value...Unicode.Scalar("Z").value)
        .map { String(Unicode.Scalar($0)!) }

    @State var visibleRows: Set<String> = []

    var body: some View {
        List(rows, id: \.self) { row in
            HStack {
                Text(row)
                    .padding(40)
                    .onAppear { self.visibleRows.insert(row) }
                    .onDisappear { self.visibleRows.remove(row) }
            }
            Spacer()
            Text(self.getVisibleIndex(for: row)?.description ?? "")
        }
    }

    func getVisibleIndex(for row: String) -> Int? {
        visibleRows.sorted().firstIndex(of: row)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 SwiftUI 中的列表获取屏幕行? 的相关文章

随机推荐