我在 SwiftUI 的 TabView
中有一个 PageViewTabStyle
,因此我可以在页面之间滑动。我想要一个将当前视图“锁定”到位的设置,因此用户无法滑动。谷歌搜索和阅读文档对我来说没有任何明显的意义,所以我希望 SO 上的大师可以帮助我。
简而言之,我的代码看起来像
TabView {
ForEach(0..<5) { idx in
Text("Cell: \(idx)")
}
}
.tabViewStyle(PageTabViewStyle())
我找到了 disabled
属性,但随后似乎整个视图上的所有点击事件都被忽略了 - 我只是想阻止用户切换标签(或者,在这种特殊情况下,滑动或按下页面点来切换页面)。我已经尝试了 here 的解决方案,其中 gesture
属性设置为 nil
,但这似乎并没有真正阻止滑动手势更改页面({{1 }} 有点不错,不过!)
非常感谢任何帮助!谢谢!
答案 0 :(得分:6)
上述参考文献中的解决方案,只是滑动不是被 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 测试
那样有条件答案 1 :(得分:2)
要阻止 TabView 中的所有滑动手势,您必须使用 .simultaneousGesture(DragGesture())
来阻止子视图中的所有滑动手势
TabView {
ForEach(0..<5) { idx in
Text("Cell: \(idx)")
.frame(maxWidth: .infinity, maxHeight: .infinity)
.contentShape(Rectangle())
.simultaneousGesture(DragGesture())
}
}
.tabViewStyle(PageTabViewStyle())