【问题标题】:SwiftUI 2.0 TabView disable swipe to change pageSwiftUI 2.0 TabView 禁用滑动以更改页面
【发布时间】:2020-11-19 21:27:59
【问题描述】:

我有一个使用 swiftUI 2.0 PageTabViewStyle 的 TabView。有什么办法可以禁用滑动换页吗?

我的第一个标签视图中有一个搜索栏,但是如果用户正在输入,我不想让他们能够更改他们的状态,我基本上希望它被锁定在该屏幕上,直到所述功能完成了。

这是一个显示差异的 gif,我希望在 gif 全屏时禁用标签更改。 https://imgur.com/GrqcGCI

【问题讨论】:

    标签: xcode swiftui tabview


    【解决方案1】:

    试试下面的方法(用一些存根代码测试)。这个想法是在某些条件(在您的情况下开始编辑)发生时阻止选项卡视图拖动手势

    @State var isSearching = false
    
    // ... other code
    
    TabView {
        // ... your code here
    
        Your_View()
           .gesture(isSearching ? DragGesture() : nil)  // blocks TabView gesture !!
    }
    .tabViewStyle(PageTabViewStyle(indexDisplayMode: .always))
    

    【讨论】:

    • 这部分有效。它只会阻止用户尝试从显示屏上的可见元素开始拖动(他们仍然可以从其他区域拖动)并且不会禁用下面的索引点。
    • 下面的索引点来自indexDisplayMode,您可以通过将其设置为.never @JacobWood 来删除它们
    • .indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .never)) .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never)) 是我用来禁用点及其背景的方法
    • @JacobWood 你让它可靠地工作了吗?手势覆盖对我来说是错误的
    • 相同 - 滑动手势仍显示为更改页面。我实际上打开了一个关于它的新问题(stackoverflow.com/questions/65524458/…),但如果这里的答案更新,可以关闭它。谢谢!
    【解决方案2】:

    对于任何试图解决这个问题的人,我设法通过将 TabView 状态设置为禁用来做到这一点。

    TabView(selection: $currentIndex.animation()) {
        Items()
     }.disabled(true)
     
    

    编辑:如 cmets 中所述,这也会禁用 TabView 中的所有内容

    【讨论】:

    • 这可行,但现在没有一个项目是交互式的
    猜你喜欢
    • 2023-02-16
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 2022-11-17
    • 2021-02-19
    相关资源
    最近更新 更多