これが私のコードです。ボタンがなくても onTapGesture があると、スクロールは非常にスムーズです。すごい!しかし、Text() ビューをボタンに配置すると、遅延が非常にひどくなり、少しでもハングアップします...
これは簡略化されたコードです。私の実際のプロジェクトでは、GridCell と呼ばれるビューがあります。これは、基本的に、内部に文字列が入った色付きのボックスです。しかし、そのビューをボタンに配置すると (コンテンツ/ラベルとして GridCell を使用して ForEach でボタンを使用するのではなく)、ラグも発生します。LazyVGrids のボタンを避けるべきですか、それとも何らかのバグですか?
import SwiftUI
let columnCount: Int = 11
let gridSpacing: CGFloat = 1
struct SimpleGridView: View {
@State private var selected: String? = nil
let data = (1...1000).map { "\($0)" }
let columns: [GridItem] = Array(repeating: .init(.flexible(), spacing: gridSpacing), count: columnCount)
let colCount: CGFloat = CGFloat(columnCount)
var body: some View {
GeometryReader { geo in
ScrollView (showsIndicators: false) {
LazyVGrid(columns: columns, spacing: gridSpacing) {
ForEach(data, id: \.self) { item in
// This code creates lag when scrolling
// Button(action: {
// selected = item
// }) {
// Text(item)
// }
/// This code is fine, apparently.
Text(item)
.onTapGesture(count: 1, perform: {
selected = item
})
}
}
.sheet(item: $selected) { item in // activated on selected item
DetailView(item: item)
}
.padding(.horizontal)
}
}
}
}
struct DetailView: View {
let item: String
var body: some View {
Text(item)
}
}