首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >长按和列表滚动

长按和列表滚动
EN

Stack Overflow用户
提问于 2019-12-22 06:27:27
回答 3查看 1.6K关注 0票数 9

使用SwiftUI (最新的XCode和iOS13.3上的测试),我试图在列表中的项目上实现一个长按压手势,以允许用户与各个项目进行交互。问题是,当我在列表中的任何地方(在项目上,在列表本身上)设置"onLongPressGesture“时,列表不能再滚动。我可以很容易地让一个简单的点击工作,但长按块滚动。

我已经整理了一个小例子来说明这个问题:

代码语言:javascript
复制
struct ContentView: View
{
  let data = [
    "Test 1","Test 2","Test 3","Test 4","Test 5",
    "Test 6","Test 7","Test 8","Test 9","Test 10",
    "Test 11","Test 12","Test 13","Test 14","Test 15",
    "Test 16","Test 17","Test 18","Test 19","Test 20"
  ]

  var body: some View
  {
    List
    {
      ForEach(data,id:\.self)
      {
        item in
        Text(item).onLongPressGesture{}
      }
    }
  }
}

如果我试图拖动列表按下任何文本,列表将不会移动。如果我移除down press处理程序,无论我在哪里按下,它都会移动。

EN

回答 3

Stack Overflow用户

发布于 2019-12-27 19:10:07

我也在苹果开发者论坛上问过这个问题,并得到了一个解决问题的方案。如果视图在onLongPressGesture之前定义了一个onTapGesture处理程序,那么列表将是可滚动的,同时支持长按各个项目。

只要首先声明了onTapGesture处理程序,它就可以为空。

代码语言:javascript
复制
struct ContentView: View
{
  let data = [
    "Test 1","Test 2","Test 3","Test 4","Test 5",
    "Test 6","Test 7","Test 8","Test 9","Test 10",
    "Test 11","Test 12","Test 13","Test 14","Test 15",
    "Test 16","Test 17","Test 18","Test 19","Test 20"
  ]

  var body: some View
  {
    List
    {
      ForEach(data,id:\.self)
      {
        item in
        Text(item).onTapGesture{}.onLongPressGesture{}
      }
    }
  }
}
票数 23
EN

Stack Overflow用户

发布于 2021-09-15 04:44:26

参考@Jensrodi的解决方案,因为它工作得很完美,尽管你可以通过在.onLongPressGesture之前添加一个.onTapGesture来体验比你预期的更高的延迟。

为了缓解这种情况,您可以使用onLongPressGesture(minimumDuration:)来减少/增加到您喜欢的持续时间。

请参见下面的示例

代码语言:javascript
复制
List {
    ForEach(0..<100) { x in
        Text("List number -\(x)")
            .onTapGesture{}.onLongPressGesture(minimumDuration: 0.2) { // Setting the minimumDuration to ~0.2 reduces the delay
                print("long press \(x)")
            }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2019-12-22 18:46:29

我认为你应该深入挖掘组合手势的作曲。你可以看到如何组合两个或更多的手势,但在你的例子中,我认为你需要exclusive Here (这在in this article中描述)。所以你可以组合DragGestureLongPressGesture,除了ScrollView (我没有找到任何滚动List的解决方案)。下面是如何控制ScrollView.content.offset (用于在DragGesture上滚动)的example 1example 2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59440283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档