С последней версией SwiftUI (2) теперь у нас есть доступ к еще нескольким API
Для начала мы можем использовать LazyVStack
с ScrollView
, чтобы дать нам довольно хорошую производительность, тогда мы можем используйте pinnedViews
API, чтобы указать в массиве, какое дополнительное представление мы хотим закрепить или сделать закрепленным. Затем мы можем использовать представление раздела, которое обертывает наш контент и указывает либо нижний колонтитул, либо заголовок.
** Этот код работает с Xcode beta 2 **
Что касается использования этого в List
Не совсем уверен, будет интересно посмотреть производительность с List
vs Lazy...
struct ContentView: View {
var body: some View {
ScrollView {
LazyVStack(spacing: 10, pinnedViews: [.sectionFooters]) {
ForEach(0..<20, id: \.self) { index in
Section(footer: FooterView(index: index)) {
ForEach(0..<6) { _ in
Rectangle().fill(Color.red).frame(height: 100).id(UUID())
}
}
}
}
}
}
}
struct FooterView: View {
let index: Int
var body: some View {
VStack {
Text("Footer \(index)").padding(5)
}.background(RoundedRectangle(cornerRadius: 4.0).foregroundColor(.green))
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}