如何阻止 SwiftUI Picker 对其可见区域以外的触摸做出反应?

How to stop a SwiftUI Picker from reacting to touches outside its visible area?

我在视图中有一个选择器,我希望将其限制为定义的高度和宽度。虽然下面的代码在视觉上实现了这一点,但选择器会响应其区域之外的点击操作——在某些情况下,响应点击附近的按钮,就好像我正在点击以将选择器滚动到其值的开头或结尾。 (按钮不响应轻敲;选择器响应。但这也会发生在靠近 - 但在 - Picker 之外轻敲时,那里没有控制。)

选择器似乎对上方、下方和侧面的触摸都有反应。当视图足够大(全屏或 2/3 屏幕)时,效果变得不那么明显,但是当整个应用程序只占屏幕的 1/3 时,选择器的宽度——作为视图的函数geometry -- 变小了,其他控件也靠得更近了,操作起来就很困难了。

如何让 Picker 忽略其可见区域之外的所有触摸?

Picker(selection: self.$monthSelector, label: Text("Month")) {
   ForEach(0 ..< 12, id: \.self) {
      Text(self.monthNames()[[=10=]])
         .foregroundColor(  Color.black )
      }
   }
      .labelsHidden()
       // THE FOLLOWING 2 STATEMENTS *IN CONJUNCTION* SEEM TO GIVE DESIRED Height/Width
      .fixedSize()
      .frame(maxWidth: geometry.size.width * 0.35, maxHeight: 100)
      .clipped()     // seems to accomplish nothing, visually or regarding touches
      .background(Color.white)
      .cornerRadius(10)

我考虑过的事情:

这是一个解决方案。使用 Xcode 11.4 / iOS 13.4.

测试
.compositingGroup() // << add this modifier above clipping !!!
.clipped()

如果您在裁剪之前应用 .contentShape(Rectangle()),它会将触摸限制在可见区域。

这个 link 经历了一些旧的变通办法,但似乎没有一个适合 iOS 15.1 的变通办法。

这里有一个如何让它工作的例子。他创建了一个 ViewRepresentable 结构。