SwiftUI:增加用户交互的点击/拖动区域
我已经在SwiftUI中构建了一个自定义滑块,带有一个20x20的拇指拖动器。一切正常,除了点击目标非常小,因为它只是20x20视图。我正在寻找一种方法来提高这一点,让用户更容易与我的滑块交互。有没有办法在SwiftUI中做到这一点 我试着用SwiftUI:增加用户交互的点击/拖动区域,swift,swiftui,Swift,Swiftui,我已经在SwiftUI中构建了一个自定义滑块,带有一个20x20的拇指拖动器。一切正常,除了点击目标非常小,因为它只是20x20视图。我正在寻找一种方法来提高这一点,让用户更容易与我的滑块交互。有没有办法在SwiftUI中做到这一点 我试着用Color.clear.overlay包裹拇指,并将边框设置为60x60。如果颜色为纯色,如红色,则此功能有效,但使用清除时,点击目标似乎恢复为20x20的可见像素 你可以在这张gif上看到,即使在拇指外侧点击,我也可以拖动滑块 但是,一旦我将颜色更改为“
Color.clear.overlay
包裹拇指,并将边框设置为60x60。如果颜色为纯色,如红色
,则此功能有效,但使用清除
时,点击目标似乎恢复为20x20的可见像素
你可以在这张gif上看到,即使在拇指外侧点击,我也可以拖动滑块
但是,一旦我将颜色更改为“清除”,此区域就不再接收交互
在
框架之后添加.contentShape(Rectangle())
我确信有几种方法可以剥猫皮,但我就是这样制作了一个大按钮,整个区域都可以点击:
Button(action: { someAction() }, label: {
Text("OK")
.frame(minWidth: 200)
.contentShape(Rectangle())
.padding()
})
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(5.0)
我也有同样的问题。除了我不希望扩展的覆盖影响布局的其余部分。如果将所有内容嵌入ZStack,并在交互对象前放置一个矩形,则可以控制手势的大小。有点像这样:
Rectangle().frame(width: screen.width, height: 300).opacity(0.001)
.layoutPriority(-1)
只需要确保将“不透明度”设置为“几乎为零”,这样您就看不到它,并将布局优先级设置为-1,这样它就不会影响视图 清晰的背景在swift UI中是不可触摸的,不久前我问了一个类似的问题-我建议在它后面放置一个按钮,使背景颜色与它后面的颜色相同,而不是清晰的我的问题作为参考:这里我只是显示了灰色,但是我想在滑块的背景中显示多种颜色,这样它就不会是纯色了。这太糟糕了-我认为这只是一个快速界面问题,你可以提交一个bug报告,希望他们最终能让你了解清楚的东西,但现在我不确定你能做什么。另外一个选择可能是添加一个技术上不清楚的背景,但是alpha太低了以至于不明显——尽管我不确定你是否能100%不被注意到是的。因此,在上面的示例中,创建20x20圆。然后添加一个额外的.frame,然后添加.contentShape(Rectangle())。我认为值得一提的是,如果您有一个框架来设置可见大小,您可以为可点击区域添加另一个框架,然后添加contentShape。它看起来很奇怪,但如果您有.frame.contentShape.frame,它就不能工作,必须是.frame.frame.contentShape