Вот обходной путь. Я использовал 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()
}
}
