如何在SwiftUI ScrollView中以编程方式检测滚动方向

时间:2019-12-15 08:43:01

标签: scrollview swiftui

我想像野生动物园一样按滚动方向显示或隐藏项目。向上滚动时隐藏一些内容,向下滚动时显示它。

3 个答案:

答案 0 :(得分:6)

您可以使用DragGesture值

ScrollView {
...
}
.gesture(
   DragGesture().onChanged { value in
      if value.translation.height > 0 {
         print("Scroll down")
      } else {
         print("Scroll up")
      }
   }
)

答案 1 :(得分:4)

我认为,simultaneousGesture 是更好的解决方案,因为它不会阻止 scrollView 事件。

ScrollView {

}
.simultaneousGesture(
       DragGesture().onChanged({
           let isScrollDown = 0 < $0.translation.height
           print(isScrollDown)
       }))

答案 2 :(得分:1)

您将使用GeometryReader获取ScrollView视图中一个视图的全局位置,以检测滚动方向。下面的代码将打印出当前的midY位置。根据+/-值,您可以显示或隐藏其他视图。

struct ContentView: View {

var body: some View {
    ScrollView{
        GeometryReader { geometry in

                Text("Top View \(geometry.frame(in: .global).midY)")
                    .frame(width: geometry.size.width, height: 50)
                    .background(Color.orange)
            }

    }.frame(minWidth: 0, idealWidth: 0, maxWidth: .infinity, minHeight: 0, idealHeight: 0, maxHeight: .infinity, alignment: .center)
}

}