SwiftUI:NavigationLink 内的水平 ScrollView 会中断导航
Posted
技术标签:
【中文标题】SwiftUI:NavigationLink 内的水平 ScrollView 会中断导航【英文标题】:SwiftUI: horizontal ScrollView inside NavigationLink breaks navigation 【发布时间】: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
捕获导航点击手势的任何想法?
【问题讨论】:
【参考方案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 之外会使整行内容滚动,这不是我想要的。以上是关于SwiftUI:NavigationLink 内的水平 ScrollView 会中断导航的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI NavigationLink 如何到达另一个 SwiftUI 页面?