簡體   English   中英

SwiftUI 列表中所有行的高度相同

[英]Same height for all rows in SwiftUI List

我正在嘗試構建一個List ,其中所有行都具有相同的高度

struct ContentView: View {

    @State var content = ["row1", "row2\nrow2\nrow2", "row3"]

    var body: some View {
        List {
            ForEach(0..<content.count, id: \.self) { index in
                Text(self.content[index])
            }
        }
    }
}

Row1 和 row3 應該與 row2 具有相同的高度在此處輸入圖片說明

這是一個解決方法。 我已經使用 geometryReader 來計算內容高度。一旦我們獲得了內容的最大高度,在首選項的幫助下更新單元格。

struct TestView: View {
@State var content = ["row1", "row2\nrow2\nrow2", "row3"]
@State var rowHeight: CGFloat = 0

var body: some View {
  List {
      ForEach(0..<content.count, id: \.self) { index in
        Text(self.content[index])
            .frame(minHeight: self.rowHeight)  // set height as max height
            .background(
                GeometryReader{ (proxy) in
                    Color.clear.preference(key: SizePreferenceKey.self, value: proxy.size)  
            })
            .onPreferenceChange(SizePreferenceKey.self) { (preferences) in
                let currentSize: CGSize = preferences
                if (currentSize.height > self.rowHeight) {
                    self.rowHeight = currentSize.height     //As height get change upto max height , put value in self.rowHeight
                }
            }
      }
  }
}
}

struct SizePreferenceKey: PreferenceKey {
    typealias Value = CGSize
    static var defaultValue: Value = .zero

    static func reduce(value: inout Value, nextValue: () -> Value) {
        nextValue()
    }
}

輸出

暫無
暫無

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

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