SwiftUI: How to make a transparent Rectangle (.fill(.clear)) receive gestures?

Viewed 118

I would like to overlay my image with several Rectangle()s, that should respond to gestures (like tapping or dragging). However, I found that when I make the rectangle clear, it stops receiving gestures.

Rectangle()
  .fill(.clear)
  .gesture(
    LongPressGesture()
      .onEnded { value in 
        // this isn't called when the rectangle fill is .clear
      }
  )

Is there a way to let an invisible element receive taps? I know that I could give it a 1 % opacity, but that feels like an ugly (and visible) kludge.

2 Answers

Add content shape that defines hit-testable area, like

Rectangle()
  .fill(.clear)
  .contentShape(Rectangle())   // << here !!
  .gesture(

One extra way apart from @Asperi's answer is

Color.clear.contentShape(Rectangle())
Related