如何在SwiftUI视图上禁用用户交互?

9ceoxa92  于 2023-06-28  发布在  Swift
关注(0)|答案(9)|浏览(194)

假设我有一个SwiftUI视图层次结构,看起来像这样:

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

Text视图阻止触摸事件到达底层ScrollView
使用UIKit,我会使用类似.isUserInteractionEnabled的东西来控制它,但我找不到任何方法来使用SwiftUI来做到这一点。
我尝试在文本视图中添加Gesture.noneGestureMask,但似乎不起作用。
我希望我在这里遗漏了一些明显的东西,因为我需要在滚动视图的顶部放置一些状态信息。

niwlg2el

niwlg2el1#

如何使用.allowsHitTesting()?
https://developer.apple.com/documentation/swiftui/image/3269586-allowshittesting
从我的理解,它应该通过手势后面的看法,如果它的残疾人。

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

p4rjhz4m2#

视图上有一个用于禁用或启用用户交互的修改器:
disabled(_ disabled: Bool)

hiz5n14c

hiz5n14c3#

你要确保你用一些颜色来填充你的视图,除了“清除”颜色(你总是可以改变不透明度)。我还添加了模糊来隐藏元素。以下是对我有效的方法:

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

xqk2d5yq4#

SwiftUI 2.0

ZStack {

    // Your Stack to Disable User Interaction

}.disabled(showLoadingIndicator)
kqqjbcuj

kqqjbcuj5#

把你的视图放到一个Group中,然后应用修改器.allowsHitTesting(false)来禁用与组内任何视图的交互。

Group {
  Button("Hello")
}
.allowsHitTesting(false)

要启用交互,请将修饰符切换为true。

mefy6pfw

mefy6pfw6#

这很可能是SwiftUI中的一个bug,但解决这个问题的方法是删除我放在Text视图上用于边界调试的.border()

ghg1uchk

ghg1uchk7#

SwiftUI中的某些元素无法通过.disabled或.allowHitTesting禁用。一个主要的HACK是将元素 Package 在TabView中并对其应用分页样式。再次这是一个主要的黑客,但它是一个有趣的解决方案,我目前正在使用。

eeq64g8w

eeq64g8w8#

我在手表应用程序上做了类似的事情,将文本字段覆盖在滑块上。当应用于文本字段时,我无法使.disable或.allowHitTesting工作。
为了解决这个问题,我发现将Text字段放在Group{}中(全部单独),然后应用.allowHitTesting(false)非常有效。

mznpcxlj

mznpcxlj9#

ZStack {

}
.allowsHitTesting(false)

它将禁用用户交互

相关问题