ios SwiftUI TabView PageTabViewStyle阻止更改标签页?

xmjla07d  于 2023-04-22  发布在  iOS
关注(0)|答案(3)|浏览(169)

我在PageViewTabStyle中的SwiftUI中有一个TabView,所以我可以在页面之间滑动。我想有一个设置,“锁定”当前视图,所以用户不能滑动。谷歌和阅读文档对我来说没有任何明显的东西,所以我希望SO上的大师可以帮助我。
简而言之,我的代码看起来像

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

我已经找到了disabled属性,但似乎在整个视图中忽略了所有的点击事件-我只是想防止用户切换选项卡(或者,在这个特定的情况下,滑动或按下页面点来切换页面)。我已经尝试了here的解决方案,其中gesture属性设置为nil,但这似乎并没有真正阻止滑动手势改变页面(尽管indexDisplayMode位很好!)
任何帮助都非常感谢!谢谢!

kpbpu008

kpbpu0081#

上述参考文献中的解决方案有效,只是滑动不是被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测试

6tdlim6h

6tdlim6h2#

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

TabView {
          ForEach(0..<5) { idx in
            Text("Cell: \(idx)")
                    .frame(maxWidth: .infinity, maxHeight: .infinity)
                    .contentShape(Rectangle())
                    .simultaneousGesture(DragGesture())
          }
        }
        .tabViewStyle(PageTabViewStyle())
2hh7jdfx

2hh7jdfx3#

我的解决方案是这个,它禁止通过滑动来改变标签,并且在屏幕上保持拖动手势,因为我在某些屏幕上使用List .onDelete
仅适用于iOS 16

@State private var selectedTab = 1

TabView(selection: $selectedTab) {
    Text("Tab 1")
        .tag(0)
        .toolbar(.hidden, for: .tabBar)
    Text("Tab 2")
        .tag(1)
        .toolbar(.hidden, for: .tabBar)
    Text("Tab 3")
        .tag(2)
        .toolbar(.hidden, for: .tabBar)
}

相关问题