Button 为什么在按钮中放置视图会导致LazyVGrid出现严重的延迟(bug?)?

Button 为什么在按钮中放置视图会导致LazyVGrid出现严重的延迟(bug?)?,button,scroll,swiftui,lazyvgrid,Button,Scroll,Swiftui,Lazyvgrid,这是我的密码。不使用按钮,但使用ontapsignature,滚动非常平滑。伟大的但是如果我把Text()视图放在一个按钮中,那么滞后是非常非常糟糕的,甚至有一点悬空 这是简化的代码。在我的实际项目中,我有一个名为GridCell的视图,它本质上是一个带字符串的彩色框。但如果我将该视图放在一个按钮中(而不是使用ForEach中的按钮,并将GridCell作为其内容/标签),则也存在延迟。我们是否应该避免在懒散的网格中使用按钮,或者这是某种缺陷 import SwiftUI le

这是我的密码。不使用按钮,但使用ontapsignature,滚动非常平滑。伟大的但是如果我把Text()视图放在一个按钮中,那么滞后是非常非常糟糕的,甚至有一点悬空

这是简化的代码。在我的实际项目中,我有一个名为GridCell的视图,它本质上是一个带字符串的彩色框。但如果我将该视图放在一个按钮中(而不是使用ForEach中的按钮,并将GridCell作为其内容/标签),则也存在延迟。我们是否应该避免在懒散的网格中使用按钮,或者这是某种缺陷

    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)
        }
    }