次のようなSwiftUIビュー階層があるとします。
ZStack() {
ScrollView {
...
}
Text("Hello.")
}
Text
ビューは、タッチイベントが基になるScrollView
に到達するのをブロックします。
UIKitでは、これを制御するために.isUserInteractionEnabled
のようなものを使用しますが、SwiftUIでこれを行う方法が見つかりません。
テキストビューにGesture
をGestureMask
に.none
として追加しようとしましたが、うまくいかないようです。
スクロールビューの上にいくつかのステータス情報を配置する必要があるため、ここで明らかな何かが欠けているといいのですが。
.allowsHitTesting()の使用についてはどうですか?
https://developer.Apple.com/documentation/swiftui/image/3269586-allowshittesting
私の理解では、無効になっている場合はジェスチャーを背後のビューに渡す必要があります。
ZStack() {
ScrollView {
...
}
Text("Hello.").allowsHitTesting(false)
}
ビューには、ユーザー操作を無効または有効にする修飾子があります。
disabled(_ disabled: Bool)
これはおそらくSwiftUIのバグですが、この問題の回避策は、境界デバッグのためにText
ビューに配置した.border()
を削除することでした。
クリアカラー以外の色でビューを塗りつぶす必要があります(不透明度はいつでも変更できます)。要素を隠すためにぼかしも追加しました。これが私のために働いたものです:
SwiftUI:
ZStack{
SomeView().blur(radius: 12)
Rectangle()
.fill(Color.white.opacity(0))
.allowsHitTesting(false)
}
スクロールやボタンのタップなどのユーザーインタラクションを無効にするが、ユーザータップにアクションを添付する別の方法(たとえば、この機能がペイウォールの内側または後方にあることをユーザーに伝えるメッセージ):
SwiftUI:
VStack{
SomeView().blur(radius: 12)
}
.contentShape(Rectangle())
.onTapGesture {
print("No access!")
}