SwiftUI で透明な View に Gesture を設定する

下記のように、Color.clear のような透明のビューにジェスチャーを追加したかったけど反応しなかった。

import SwiftUI

struct ExampleView: View {
    @State var text: String = "ケバブ"

    var body: some View {
        ZStack {
            Color.clear
                .onTapGesture {
                    text = "ハンバーガー"
                }

            Text(text)
        }
    }
}

下記のように contentShape を設定してあげるとジェスチャーが反応するようになる。

import SwiftUI

struct ExampleView: View {
    @State var text: String = "ケバブ"

    var body: some View {
        ZStack {
            Color.clear
                .contentShape(Rectangle()) // 追加
                .onTapGesture {
                    text = "ハンバーガー"
                }

            Text(text)
        }
    }
}

Color.clear だけでなく、 VStack や HStack といった、コンテナ的な View も同様の方法で設定できるとのこと。

参考

stackoverflow.com

www.hackingwithswift.com