附加.simultaneousGesture时,SwiftUI文本字段将停止事件以触发NavigationLink

时间:2019-11-04 21:44:42

标签: swiftui navigationlink

我有以下导航链接:

Microsoft .NET Framework [3.5] [4] [4.5] [4.5.1] [4.5.2] [4.6] [4.6.1] [4.7.1] [4.7.2]

如果我留在“ .simultaneousGesture ...”中,则在Text元素上的点击不会触发NavigationLink操作,但是其余行仍然有效。

如果我删除.simultaneousGesture,则可以在任何地方再次点击该行。

臭虫?

2 个答案:

答案 0 :(得分:2)

添加.simultaneousGesture(:)调用是在NavigationLink的标签上而不是在行本身上创建轻击手势识别器。有关手势识别器的两个事实解释了观察到的行为。

  1. NavigationLink的标签实际上位于列表/表格行的上方(参见图片)(请参见图片),这意味着它现在将在到达列表/表格行之前拦截所有点击。 / li>
  2. 不透明度为0的视图的任何部分都不会拦截点击,从而允许其传递到下一个手势识别器;在这种情况下,是列表/表单行。

因此,当您点击其中一个文本视图时,该点击由TapGesure.onEnded()闭包处理。但是,当您点击中间的空格时,点击“通过”并由列表/表单行上的识别器处理,从而触发NavigationView序列号。

因此,这是SwiftUI设计的决定,而不是错误。当前,List / Form尚无法在保持导航功能的同时识别自定义手势。如果您有使用这种行为的用例,submit some feedback,也许我们明年就可以看到。

View Hierarchy

答案 1 :(得分:0)

谢谢您的解释。这说得通。它使我寻找触发电话的适当方法。

.onAppear(){ .... }

我试图在点击导航链接时模拟viewWillAppear类型的事件。我将onAppear放在vStack上,效果很好。