如何阻止SwiftUI选择器对其可见区域外的触摸作出反应?

如何阻止SwiftUI选择器对其可见区域外的触摸作出反应?,swiftui,picker,Swiftui,Picker,我在视图中有一个选择器,我希望将其限制为定义的高度和宽度。虽然下面的代码可以直观地实现这一点,但选择器会对其区域外的点击操作做出响应——在某些情况下,对点击附近的按钮做出响应,就像我在点击以将选择器滚动到其值的开始或结束一样。(按钮不响应点击;选择器响应。但在没有控制的情况下,在靠近选择器但在选择器外部点击时也会发生这种情况。) 采摘者似乎对上面、下面和侧面的触摸都有反应。当视图足够大(全屏,或2/3屏幕)时,效果会变得不那么明显,但当整个应用程序仅获得屏幕的1/3时,选择器的宽度(作为视图几何

我在视图中有一个选择器,我希望将其限制为定义的高度和宽度。虽然下面的代码可以直观地实现这一点,但选择器会对其区域外的点击操作做出响应——在某些情况下,对点击附近的按钮做出响应,就像我在点击以将选择器滚动到其值的开始或结束一样。(按钮不响应点击;选择器响应。但在没有控制的情况下,在靠近选择器但在选择器外部点击时也会发生这种情况。)

采摘者似乎对上面、下面和侧面的触摸都有反应。当视图足够大(全屏,或2/3屏幕)时,效果会变得不那么明显,但当整个应用程序仅获得屏幕的1/3时,选择器的宽度(作为视图几何图形的函数)变小时,其他控件也会更接近,使用起来会变得非常困难

如何使选择器忽略其可见区域以外的所有接触?

Picker(selection: self.$monthSelector, label: Text("Month")) {
   ForEach(0 ..< 12, id: \.self) {
      Text(self.monthNames()[$0])
         .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)
Picker(选择:self.$monthSelector,标签:Text(“月”)){
ForEach(0..<12,id:\.self){
文本(self.monthNames()[$0])
.foregroundColor(颜色.黑色)
}
}
.标签隐藏()
//以下两条语句*结合*似乎给出了所需的高度/宽度
.fixedSize()
.frame(最大宽度:geometry.size.width*0.35,最大高度:100)
.clipped()//在视觉上或在触摸方面似乎一事无成
.背景(颜色.白色)
.转弯半径(10)
我考虑过的事情:

  • .clipped
    放在框架上(建议)。没有效果
  • 不是SwiftUI,也没有真正的线索
  • 讨论如何扩展按钮的可点击区域。看不到将关键细节(“将修改器应用于按钮内容而不是按钮本身”)应用于选择器的方法,尤其是在其高度方面
  • 没有答案,而且我在选取者身上看到的似乎远远超出了对该问题的评论所认为的15分的“误差范围”。此外,我所看到的选择器在模拟器和实际设备中都发生了

    • 这里有一个解决方案。使用Xcode 11.4/iOS 13.4进行测试

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

      .compositingGroup()//这里有一个解决方案。使用Xcode 11.4/iOS 13.4进行测试

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

      .compositingGroup()//你能解释compositingGroup()在这里做什么吗。你能解释compositingGroup()在这里做什么吗。