如何使用 SwiftUI 在 TabView 中禁用垂直滚动?

Gui*_*ume 25 tabview swift 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))
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

nic*_*rno 14

我有同样的问题。这不是一个确切的解决方案,但您可以关闭滚动视图(在 TabView 中使用)上的弹跳。只要 TabView 中的项目不大于 TabView 框架,它就应该像禁用垂直滚动一样。

我会在 .onAppear 或您的 init 函数中调用它:

.onAppear(perform: {
   UIScrollView.appearance().bounces = false
 })
Run Code Online (Sandbox Code Playgroud)

注意:这会禁用应用程序中所有滚动视图的弹跳...因此您可能需要重新启用它 .onDisappear。


val*_*ine 7

仍然是 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
})
Run Code Online (Sandbox Code Playgroud)