SwiftUI Tap Gesture не работает в ScrollView - PullRequest
0 голосов
/ 12 июля 2020

Я рисую коробки и хочу нажать на них. Однако жест касания не работает, если я помещаю код в ScrollView. Если я удалю GeometryReaer, код будет работать, но он мне нужен (хотя я не использую его в этом простом примере). Есть идеи, как заставить код работать с ScrollView и GeometryReader?

enter image description here

struct ContentView: View {
    var body: some View {
        // REMOVING ScrollView makes TapGesture WORK
        ScrollView {
            WorksGridView()
        }
    }
}

struct WorksGridView: View {
    private var items = 5
    
    var body: some View {
        GeometryReader { geometry in
            VStack(spacing: 0) {
                ForEach(0..<self.items) { index in
                    GridInventoryItem()
                        .onTapGesture {
                            print("I'm not appearing!!!")
                    }
                }
            }
        }
    }
}

struct GridInventoryItem: View {
    var body: some View {
        Rectangle()
            .padding()
            .frame(width: 150, height:  150)
    }
}

1 Ответ

2 голосов
/ 12 июля 2020

Переместите ScrollView внутрь Geometry Reader, и он работает: Проверено на iOS 13,5

struct ContentView: View {
    var body: some View {
        // REMOVING ScrollView makes TapGesture WORK
        
        WorksGridView()
        
    }
}

struct WorksGridView: View {
    private var items = 5
    
    var body: some View {
        GeometryReader { geometry in
            ScrollView{
                VStack(spacing: 0) {
                    ForEach(0..<self.items) { index in
                        GridInventoryItem()
                            .onTapGesture {
                                print("I'm not appearing!!!")
                            }
                    }
                }
            }
        }
    }
}

struct GridInventoryItem: View {
    var body: some View {
        Rectangle()
            .padding()
            .frame(width: 150, height:  150)
    }
}
...