watchOS 上的 SwiftUI 表单:点击手势间歇性失败
Posted
技术标签:
【中文标题】watchOS 上的 SwiftUI 表单:点击手势间歇性失败【英文标题】:SwiftUI Form on watchOS: tap gesture intermittently fails 【发布时间】:2019-08-01 16:41:58 【问题描述】:在 watchOS 上,我正在尝试制作一个非常简单的表单,该表单由一个部分组成,其中包含一个文本值列表,我可以点击它来执行一些操作。代码如下。
struct ContentView: View
var body: some View
Form
Section(header: Text("Section 1"))
ForEach(0 ..< 3) int in
Text("Hello \(int)")
.onTapGesture(count: 1)
print("Tapped \(int)")
当我在模拟器中运行此程序时,每个单元格点击只会根据需要间歇性打印。对于任何单元格,有时点击会发出打印,有时什么也不会发生。 (更多时候,什么都没有发生。只是偶尔会发出打印。)
是我做错了什么,还是 Apple Watch 模拟器中的错误?从 macOS Catalina beta 5 上的 Xcode 11 beta 5 开始,在 40mm 和 44mm 模拟器中都会出现。
【问题讨论】:
【参考方案1】:为了回答我自己的问题,我提交了 Apple 反馈并得到了回复:
请注意,我们的工程团队已根据所提供的信息确定此问题的行为符合预期。
带有 onTapGesture() 修饰符的文本将在文本本身被点击时触发关闭。在您的示例项目中,点击文本本身会触发块,但在文本之外点击不会。如果您想要在点击 List 行时执行操作,请在 List 中放置一个 Button,其中 Text 作为 Button 的内容。
他们还提供了这个示例代码sn-p:
List
Section(header: Text("Section 1"))
ForEach(0..<3) value in
Button(action:
print("Tapped \(value)")
)
Text("Hello \(value)")
没有关于 Form 构造的答案,但 List 示例是有道理的,虽然乍一看有点不直观。
【讨论】:
以上是关于watchOS 上的 SwiftUI 表单:点击手势间歇性失败的主要内容,如果未能解决你的问题,请参考以下文章
在 SwiftUI 中隐藏 Picker 在 watchOS 上的焦点边界
使用 SwiftUI List()、ForEach()、.onTapGesture WatchOS6 传递值的问题
如何在 SwiftUI 中的 WatchOS 中实现 handleUserActivity?