假设我有一个SwiftUI视图层次结构,看起来像这样:
ZStack() {
ScrollView {
...
}
Text("Hello.")
}
Text
视图阻止触摸事件到达底层ScrollView
。
使用UIKit,我会使用类似.isUserInteractionEnabled
的东西来控制它,但我找不到任何方法来使用SwiftUI来做到这一点。
我尝试在文本视图中添加Gesture
和.none
的GestureMask
,但似乎不起作用。
我希望我在这里遗漏了一些明显的东西,因为我需要在滚动视图的顶部放置一些状态信息。
9条答案
按热度按时间niwlg2el1#
如何使用.allowsHitTesting()?
https://developer.apple.com/documentation/swiftui/image/3269586-allowshittesting
从我的理解,它应该通过手势后面的看法,如果它的残疾人。
p4rjhz4m2#
视图上有一个用于禁用或启用用户交互的修改器:
disabled(_ disabled: Bool)
hiz5n14c3#
你要确保你用一些颜色来填充你的视图,除了“清除”颜色(你总是可以改变不透明度)。我还添加了模糊来隐藏元素。以下是对我有效的方法:
SwiftUI:
另一种禁用用户交互(如滚动或按钮点击)的方法,但将操作附加到用户点击(例如,向用户发送消息,告知此功能即将推出或在付费墙之后):
SwiftUI:
xqk2d5yq4#
SwiftUI 2.0
kqqjbcuj5#
把你的视图放到一个
Group
中,然后应用修改器.allowsHitTesting(false)
来禁用与组内任何视图的交互。要启用交互,请将修饰符切换为true。
mefy6pfw6#
这很可能是SwiftUI中的一个bug,但解决这个问题的方法是删除我放在
Text
视图上用于边界调试的.border()
。ghg1uchk7#
SwiftUI中的某些元素无法通过.disabled或.allowHitTesting禁用。一个主要的HACK是将元素 Package 在TabView中并对其应用分页样式。再次这是一个主要的黑客,但它是一个有趣的解决方案,我目前正在使用。
eeq64g8w8#
我在手表应用程序上做了类似的事情,将文本字段覆盖在滑块上。当应用于文本字段时,我无法使.disable或.allowHitTesting工作。
为了解决这个问题,我发现将Text字段放在Group{}中(全部单独),然后应用.allowHitTesting(false)非常有效。
mznpcxlj9#
它将禁用用户交互