【问题标题】:SwiftUI TabView PageTabViewStyle prevent changing tab?SwiftUI TabView PageTabViewStyle 防止更改标签?
【发布时间】:2021-04-07 23:45:44
【问题描述】:

我在 SwiftUI 中的 PageViewTabStyle 中有一个 TabView,因此我可以在页面之间滑动。我想要一个“锁定”当前视图的设置,因此用户无法滑动。谷歌搜索和阅读文档对我来说没有任何明显的发现,所以我希望 SO 上的专家能帮助我。

简而言之,我的代码看起来像

TabView {
   ForEach(0..<5) { idx in
      Text("Cell: \(idx)")
   }
}
.tabViewStyle(PageTabViewStyle())

我找到了disabled 属性,但似乎整个视图上的所有点击事件都被忽略了 - 我只是想阻止用户切换标签(或者,在这种特殊情况下,滑动或按下页面点切换页面)。我已经尝试了here 的解决方案,其中gesture 属性设置为nil,但这似乎并没有真正阻止滑动手势更改页面(不过indexDisplayMode 位很好! )

非常感谢任何帮助!谢谢!

【问题讨论】:

  • 见下文 - 以上gesture 解决方案有效!但是,当有例如onTapGesture 的子视图时,子视图仍然会拦截滑动以更改页面。我想要允许触摸交互的子视图:)
  • 子视图是什么意思?在 ZStack 中?对于代码原样,Text 元素没有任何子视图,因此您还需要将阻止手势添加到其他超级视图

标签: ios swiftui swiftui-tabview


【解决方案1】:

来自上述参考的解决方案有效,只是滑动不是被gesture(nil) 阻止,而是被gesture(DragGesture()) 阻止。并且视图应该是全标签内容视图范围,例如

    TabView {
      ForEach(0..<5) { idx in
        Text("Cell: \(idx)")
                .frame(maxWidth: .infinity, maxHeight: .infinity)
                .contentShape(Rectangle())
                .gesture(DragGesture())      // this blocks swipe
      }
    }
    .tabViewStyle(PageTabViewStyle())

使用 Xcode 12.1 / iOS 14.1 测试

* 当然,它可以是有条件的,如https://stackoverflow.com/a/63170431/12299030

【讨论】:

  • 我明白了 - 如果我有一个带有 onTapGesture 属性的子视图,该子视图仍然允许滑动更改页面。 ``` GeometryReader { Geom in TabView { ForEach(0..
  • 呃,对那里的格式感到抱歉,我不确定如何最好地回复 cmets 中的一大段代码。关键是,带有onTapGesture 的子视图仍会滑动以更改页面-禁用 that 的最佳(如果有的话)方法是什么?谢谢!
  • 还没有测试过这个,但是如果你把.gesture(DragGesture())改成.simulataneousGesture(DragGesture()),它会起作用吗?
  • 如果你们中的任何一个想用同时手势来回答,我可以接受。这会分配赏金吗?我不确定它是如何工作的......
  • 这对我来说似乎不能可靠地禁用两指滑动手势。
【解决方案2】:

要阻止 TabView 中的所有滑动手势,您必须使用 .simultaneousGesture(DragGesture()) 来阻止子视图中的所有滑动手势

TabView {
          ForEach(0..<5) { idx in
            Text("Cell: \(idx)")
                    .frame(maxWidth: .infinity, maxHeight: .infinity)
                    .contentShape(Rectangle())
                    .simultaneousGesture(DragGesture())
          }
        }
        .tabViewStyle(PageTabViewStyle())

【讨论】:

  • 这对我来说似乎也不能可靠地禁用两指滑动手势。
  • 有没有人想出一种方法来让两指拖动手势不破坏这个?
猜你喜欢
  • 1970-01-01
  • 2022-11-10
  • 2022-11-17
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
  • 2020-12-09
相关资源
最近更新 更多