SwiftUI | TextField в List
Есть вью - ячейка, в ней редактируется соответсвующий ей контент с помощью TextField. Таких ячеек более 2000, так как ScrollView безбожно лагает при таком объёме контента, я использую лист, но из-за этого пропадает возможность взаимодействия с полями.
Есть ли возможность вернуть работоспособность полям, без потери производительности?
struct CommandCellView: View
{
var body: some View
{
GeometryReader { g in
HStack
{
TextField("0000", text: ...)
.frame(width: g.size.width/3)
.frame(maxHeight: .infinity)
}
}
}
}
struct ContentView: View
{
var body: some View
{
GeometryReader { g in
List
{
ForEach(commands) { command in
CommandCellView(command.number)
.padding(.vertical, 1)
}
.frame(maxWidth: g.size.width / 3.7)
.padding(.vertical, 2)
}
}
}
}
Ответы (1 шт):
Автор решения: ronimizy
→ Ссылка
Сработал такой вариант, читаю minY координату, и если она вне зоны видимости, ставлю вместо неё EmptyView с рамкой равной ячейке по высоте.
Производительность примерно такая же как при использовании List
ScrollView
{
ForEach(commands) { command in
GeometryReader { cell in
if cell.frame(in: .global).minY > -20 && cell.frame(in: .global).minY < g.size.height + 20
{
CommandCellView(command.number)
.padding(.vertical, 1)
} else {
EmptyView()
.frame(height: 20)
}
}
}
}