【问题标题】:How to stop a SwiftUI Picker from reacting to touches outside its visible area?如何阻止 SwiftUI Picker 对其可见区域之外的触摸做出反应?
【发布时间】:2020-09-18 11:12:35
【问题描述】:

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

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

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

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)

我考虑过的事情:

  • .clipped 放在框架上(建议here)。没有效果。
  • This Question 不是 SwiftUI,我无法确定它的真正线索。
  • This Question 讨论扩展按钮的可点击区域。没有办法将关键见解(“将修饰符应用于按钮的内容而不是按钮本身”)应用于选取器——尤其是在其高度方面。
  • This Question 没有答案,而且我在选择器上看到的似乎远远超出了对该问题的评论似乎归因于 ~ 15 分的“误差范围”。此外,我在 Picker 中看到的情况既发生在模拟器中,也发生在实际设备中。

【问题讨论】:

    标签: swiftui picker


    【解决方案1】:

    此链接介绍了一些旧的解决方法,但似乎不适用于 iOS 15.1。

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

    iOS15 - SwiftUI WheelPicker scrollable outside frame and clipped area destructing other interfaces

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 你能解释一下 compositingGroup() 在这里做什么吗?
        猜你喜欢
        • 2019-11-09
        • 1970-01-01
        • 1970-01-01
        • 2020-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多