SwiftUI - Трудно прокрутить пользовательские представления - PullRequest
4 голосов
/ 27 мая 2020

У меня есть представление в моем приложении, в котором он показывает ForEach массива специально созданных ячеек для отображения информации, но я заметил, что очень сложно прокручивать поверх этих ячеек. Я заметил, что он отлично работает, если я удалю .gesture (LongPressGesture ()), но я хочу сохранить это. Есть ли другой способ обойти это или заменить .gesture (LongPressGesture ())?

Вот мой код:

struct refrigeItem:  Identifiable, Hashable {
    var id = UUID()
    var icon: String
    var title: String
    var daysLeft: Int
}




struct RefrigeratorItemCell: View {
    var icon: String
    var title: String
    var lastsUntil: Int


    var body: some View {
        HStack {
            Text(icon)
                .font(.largeTitle)
                .padding(.leading, 8)
            VStack {
                HStack {
                    Text(title)
                        .font(.custom("SF Pro Text", size: 16))
                        .multilineTextAlignment(.leading)
                    Spacer()
                }

                HStack {
                    //TODO: fix this
                    Text("lasts for \(self.lastsUntil) days")
                        .font(.custom("SF Compact Display", size: 16))
                        .foregroundColor(.gray)
                        .multilineTextAlignment(.leading)
                    Spacer()
                }
            }
            Spacer()

        }
        .padding()
        .background(Rectangle().cornerRadius(16).padding(.horizontal)
        .foregroundColor(.gray)
        )
        .padding(.bottom)


    }
}

struct ContentView: View {
    @State var displayPreview = [refrigeItem(icon: "?", title: "eggs", daysLeft: 5), refrigeItem(icon: "?", title: "croissant", daysLeft: 6)]
    var body: some View{
        NavigationView {
            GeometryReader { geo in
                VStack {
                    ScrollView(.vertical, showsIndicators: true, content: {
                        VStack {
                            ForEach(self.displayPreview, id: \.self){item in
                                RefrigeratorItemCell(icon: item.icon, title: item.title, lastsUntil: item.daysLeft)
                                .gesture(LongPressGesture()
                                .onEnded({ i in
                                    print("long pressed")
                                }))
                            }
                        }
                    })
                }
            }
        }
    }
}

1 Ответ

2 голосов
/ 28 мая 2020

обновите свой RefrigeratorItemCell, чтобы добавить onTapGesture перед добавлением жеста длительного нажатия:

      RefrigeratorItemCell(icon: item.icon, title: item.title, lastsUntil: item.daysLeft)
        .onTapGesture {}
        .gesture(LongPressGesture()
          .onEnded({ i in
            print("long pressed")
          }))
...