微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI TabView PageTabViewStyle 阻止更改选项卡?

如何解决SwiftUI TabView PageTabViewStyle 阻止更改选项卡?

我在 SwiftUI 的 TabView 中有一个 PageViewTabStyle,因此我可以在页面之间滑动。我想要一个将当前视图“锁定”到位的设置,因此用户无法滑动。谷歌搜索和阅读文档对我来说没有任何明显的意义,所以我希望 SO 上的大师可以帮助我。

简而言之,我的代码看起来像

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

我找到了 disabled 属性,但随后似乎整个视图上的所有点击事件都被忽略了 - 我只是想阻止用户切换标签(或者,在这种特殊情况下,滑动或按下页面点来切换页面)。我已经尝试了 here解决方案,其中 gesture 属性设置为 nil,但这似乎并没有真正阻止滑动手势更改页面({{1 }} 有点不错,不过!)

非常感谢任何帮助!谢谢!

解决方法

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

* 当然,它也可以像https://stackoverflow.com/a/63170431/12299030

那样有条件 ,

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。