如何使用 SwiftUI 在 TabView 中禁用垂直滚动?
How to disable vertical scroll in TabView with SwiftUI?
我在我的应用程序中设置了一个 TabView,这样我就可以在多个页面之间水平滑动,但我也可能会出现不需要的垂直滚动,并带有弹跳效果。如何禁用此垂直滚动?
我的代码:
struct ContentView: View {
@State private var currentTabIndex: Double = 0
var body: some View {
VStack {
TabView(selection: $currentTabIndex) {
Text("Text n°1")
.tag(0)
Text("Text n°2")
.tag(1)
}
.border(Color.black)
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
}
}
}
我遇到了同样的问题。这不是一个确切的解决方案,但您可以关闭滚动视图上的弹跳(在 TabView 中使用)。只要 TabView 中的项目不大于 TabView 框架,它就应该像禁用垂直滚动一样。
我会称它为 .onAppear 或在您的初始化函数中:
.onAppear(perform: {
UIScrollView.appearance().bounces = false
})
注意:这会禁用您应用中所有滚动视图的弹跳...因此您可能想要 re-enable 它 .onDisappear。
Xcode 12.4 仍然存在问题。
我设法通过将 TabView 包装在 ScrollView 中并将 alwaysBounceVertical
属性 设置为 false 来解决这个问题,如下所示:
ScrollView(.horizontal) {
TabView {
///your content goes here
}
.tabViewStyle(PageTabViewStyle())
}
.onAppear(perform: {
UIScrollView.appearance().alwaysBounceVertical = false
})
.onDisappear(perform: {
UIScrollView.appearance().alwaysBounceVertical = true
})
我在我的应用程序中设置了一个 TabView,这样我就可以在多个页面之间水平滑动,但我也可能会出现不需要的垂直滚动,并带有弹跳效果。如何禁用此垂直滚动?
我的代码:
struct ContentView: View {
@State private var currentTabIndex: Double = 0
var body: some View {
VStack {
TabView(selection: $currentTabIndex) {
Text("Text n°1")
.tag(0)
Text("Text n°2")
.tag(1)
}
.border(Color.black)
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
}
}
}
我遇到了同样的问题。这不是一个确切的解决方案,但您可以关闭滚动视图上的弹跳(在 TabView 中使用)。只要 TabView 中的项目不大于 TabView 框架,它就应该像禁用垂直滚动一样。
我会称它为 .onAppear 或在您的初始化函数中:
.onAppear(perform: {
UIScrollView.appearance().bounces = false
})
注意:这会禁用您应用中所有滚动视图的弹跳...因此您可能想要 re-enable 它 .onDisappear。
Xcode 12.4 仍然存在问题。
我设法通过将 TabView 包装在 ScrollView 中并将 alwaysBounceVertical
属性 设置为 false 来解决这个问题,如下所示:
ScrollView(.horizontal) {
TabView {
///your content goes here
}
.tabViewStyle(PageTabViewStyle())
}
.onAppear(perform: {
UIScrollView.appearance().alwaysBounceVertical = false
})
.onDisappear(perform: {
UIScrollView.appearance().alwaysBounceVertical = true
})