8

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

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

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

我找到了该disabled属性,但似乎整个视图上的所有点击事件都被忽略了 - 我只想阻止用户切换选项卡(或者,在这种特殊情况下,滑动或按下页面点来切换页面)。我从这里尝试了将gesture属性设置为的解决方案nil,但这似乎并没有真正阻止滑动手势更改页面(indexDisplayMode虽然有点好!)

任何帮助是极大的赞赏!谢谢!

4

2 回答 2

9

来自提到的参考作品的解决方案,只是滑动不是被阻止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

于 2020-12-31T18:47:14.300 回答
2

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

TabView {
          ForEach(0..<5) { idx in
            Text("Cell: \(idx)")
                    .frame(maxWidth: .infinity, maxHeight: .infinity)
                    .contentShape(Rectangle())
                    .simultaneousGesture(DragGesture())
          }
        }
        .tabViewStyle(PageTabViewStyle())
于 2021-07-04T14:49:57.797 回答