在SwiftUI中,TabView
默认允许用户通过滑动在不同的标签页之间切换。如果你想禁用这种滑动行为,SwiftUI 2.0 并没有直接的属性或方法来实现这一点。不过,你可以通过一些技巧来间接实现这个功能。
TabView
由于 TabView
自带的滑动行为不可直接禁用,你可以创建一个自定义的视图来模拟 TabView
的行为,但不包括滑动功能。这可以通过使用 Picker
和 ForEach
结合状态变量来实现:
import SwiftUI
struct ContentView: View {
@State private var selection = 0
var body: some View {
VStack {
Picker("Options", selection: $selection) {
Text("Tab 1").tag(0)
Text("Tab 2").tag(1)
Text("Tab 3").tag(2)
}
.pickerStyle(SegmentedPickerStyle())
switch selection {
case 0:
Text("Tab 1 View")
case 1:
Text("Tab 2 View")
default:
Text("Tab 3 View")
}
}
}
}
这个例子中,Picker
用于选择当前的视图,而视图内容则根据 selection
的值变化。这种方法不会有滑动效果。
TabView
并阻止滑动如果你仍然想使用 TabView
并尝试阻止滑动,可以尝试在 TabView
外层添加一个透明的视图来拦截触摸事件,但这种方法可能会导致一些非预期的行为,因为它实际上是在阻止所有的触摸事件,包括点击:
import SwiftUI
struct ContentView: View {
@State private var selection = 0
var body: some View {
TabView(selection: $selection) {
Text("Tab 1 View")
.tabItem {
Label("Tab 1", systemImage: "1.circle")
}
.tag(0)
Text("Tab 2 View")
.tabItem {
Label("Tab 2", systemImage: "2.circle")
}
.tag(1)
Text("Tab 3 View")
.tabItem {
Label("Tab 3", systemImage: "3.circle")
}
.tag(2)
}
.highPriorityGesture(DragGesture(minimumDistance: 0, coordinateSpace: .local), including: .all)
}
}
这里使用了 .highPriorityGesture
来尝试覆盖默认的滑动手势,但这种方法可能不是很可靠。
领取专属 10元无门槛券
手把手带您无忧上云