web-dev-qa-db-ja.com

SwiftUIビューでのユーザー操作を無効にする方法は?

次のようなSwiftUIビュー階層があるとします。

ZStack() {
    ScrollView {
        ...
    }
    Text("Hello.")
}

Textビューは、タッチイベントが基になるScrollViewに到達するのをブロックします。

UIKitでは、これを制御するために.isUserInteractionEnabledのようなものを使用しますが、SwiftUIでこれを行う方法が見つかりません。

テキストビューにGestureGestureMask.noneとして追加しようとしましたが、うまくいかないようです。

スクロールビューの上にいくつかのステータス情報を配置する必要があるため、ここで明らかな何かが欠けているといいのですが。

9
chockenberry

.allowsHitTesting()の使用についてはどうですか?

https://developer.Apple.com/documentation/swiftui/image/3269586-allowshittesting

私の理解では、無効になっている場合はジェスチャーを背後のビューに渡す必要があります。

ZStack() {
    ScrollView {
        ...
    }
    Text("Hello.").allowsHitTesting(false)
}
8
MihaiL

ビューには、ユーザー操作を無効または有効にする修飾子があります。

disabled(_ disabled: Bool)

3
LuLuGaGa

これはおそらくSwiftUIのバグですが、この問題の回避策は、境界デバッグのためにTextビューに配置した.border()を削除することでした。

3
chockenberry

クリアカラー以外の色でビューを塗りつぶす必要があります(不透明度はいつでも変更できます)。要素を隠すためにぼかしも追加しました。これが私のために働いたものです:

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!")
}
0
Repose