簡體   English   中英

如何從 SwiftUI 的列表中獲取屏幕行?

[英]How to get on screen rows from List in SwiftUI?

我正在嘗試將每個可見(在屏幕范圍內)行的Text放在所有可見行中它們當前索引的列表中。

我這里有一個例子。 如果我有一個一次顯示 3 行的列表,並且最初我希望它顯示如下:

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

如果我向下滾動列表,然后 A 走出屏幕,那么它就像

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

知道我該怎么做嗎?

此外,我曾經使用UITableView.visibleCells來獲取屏幕上的可見單元格,但我在 SwiftUI 中找不到類似的東西。 我究竟應該如何在 SwiftUI 中僅提供索引的列表中獲得可見行?

希望有人可以指導我到正確的地方。 非常感謝!

您可以使用onAppearonDisappear函數來維護可見行的列表,然后使用它們來查找可見索引。

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)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM