【问题标题】:SwiftUI: horizontal ScrollView inside NavigationLink breaks navigationSwiftUI:NavigationLink 内的水平 ScrollView 会中断导航
【发布时间】:2020-10-26 20:23:22
【问题描述】:

我想在List 中使用简单的水平ScrollView 作为NavigationLink。但是,点击ScrollView 并没有被NavigationLink 注册,因此不会导航到目的地。

NavigationView {
    List {
        NavigationLink(destination: Text("Detail")) {
            ScrollView(.horizontal) {
                Text("Tapping here does not navigate.")
            }
        }
    }
}

关于如何防止ScrollView 捕获导航点击手势的任何想法?

【问题讨论】:

    标签: ios swift swiftui swiftui-navigationlink swiftui-scrollview


    【解决方案1】:

    您可以将NavigationLink移动到background并在onTapGesture中激活它:

    struct ContentView: View {
        @State var isLinkActive = false
        
        var body: some View {
            NavigationView {
                List {
                    ScrollView(.horizontal) {
                        Text("Tapping here does not navigate.")
                    }
                    .onTapGesture {
                        isLinkActive = true
                    }
                }
                .background(
                    NavigationLink(destination: Text("Detail"), isActive: $isLinkActive) {}
                )
            }
        }
    }
    

    【讨论】:

    • 这行得通,但这是我已经知道的黑客/解决方法,并试图通过潜在的本机方法来避免。谢谢!
    • @damirstuhec 您在问题中尝试的内容看起来应该(可能)是 native 方式。但它不是(至少在 SwiftUI 2 中)。所以你可能仍然需要使用变通方法/黑客(就像你经常使用 SwiftUI 一样)。
    • 同意。感觉就像一个错误,所以让我们希望它尽快修复。我提交了反馈。
    【解决方案2】:

    最终目标尚不明确,但以下替代方案也确实有效(使用 Xcode 12 / iOS 14 测试)

    NavigationView {
        List {
            ScrollView(.horizontal) {
                NavigationLink(destination: Text("Detail")) {
                    Text("Tapping here does not navigate.")
                }
            }
        }
    }
    

    【讨论】:

    • 这行得通,但是,我简化了我的问题示例有点太多了。实际上,我想要一个导航链接行,其中包含除滚动视图之外的其他视图。正如您所建议的,将 ScrollView 移到 NavigationLink 之外会使整行内容滚动,这不是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多