SwiftUI无法在HStack的Spacer中点击

127

我有一个列表视图(List view),每一行都包含一个HStack,其中包含一些文本视图和一个图像,就像这样:

HStack{
    Text(group.name)
    Spacer()
    if (groupModel.required) { Text("Required").color(Color.gray) }
    Image("ic_collapse").renderingMode(.template).rotationEffect(Angle(degrees: 90)).foregroundColor(Color.gray)
}.tapAction { self.groupSelected(self.group) }

除了在文本和图像之间的空白部分(Spacer()所在的位置)轻触时未注册轻触操作外,这似乎很有效。只有在我轻触文本或图像时才会发生轻触操作。

是否有其他人遇到过此问题/知道解决方法?


诚实的问题:你为什么期望有人在“spacer”中输入?它本质上是空格。也许你的UI期望你在UIKit中输入一些东西?如果是这样,请详细说明。 - user7014451
11
每一行都只是一些文本,以一个“大于号”结尾,看起来像这样 Object One > - 我希望用户能够在任何一行上点击(注意,这里的空格没有格式化,只要想象一下文本和>之间有一个空格)。 - Quinn
15
@dfd 我认为让用户能够在表格单元格的任何位置进行点击是相当标准的行为,这也是 UIKit 表格视图上具有 didSelectRowAt 方法的原因。 - Quinn
1
当然,我同意。但是也许可以尝试其他东西来代替“Spacer”。也许将整个内容转换为“Button”?在SwiftUI中,“Spacer”只是用于间距。 - user7014451
1
简直不敢相信我要说这句话...但是没错,这是一个老但好的例子!当我建议使用按钮时,我想到了这个链接:https://alejandromp.com/blog/2019/06/09/playing-with-swiftui-buttons/ - user7014451
13个回答

0

0
只需添加一个空的背景修饰符即可。
HStack {
  ...
}
.background()
.onTapGesture { ... }

0

sergioblancoo的回答已更新。

Button {
  self.groupSelected(self.group)
}, label: {
  HStack {
    Text(group.name)
    Spacer()
    if (groupModel.required) {
      Text("Required").color(Color.gray)
    }
    Image("ic_collapse")
      .renderingMode(.template)
      .rotationEffect(Angle(degrees: 90))
      .foregroundColor(Color.gray)
  }
}

只需将整个视图用一个按钮包裹起来,而不需要 contentShape


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接