Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SwiftUI:增加用户交互的点击/拖动区域_Swift_Swiftui - Fatal编程技术网

SwiftUI:增加用户交互的点击/拖动区域

SwiftUI:增加用户交互的点击/拖动区域,swift,swiftui,Swift,Swiftui,我已经在SwiftUI中构建了一个自定义滑块,带有一个20x20的拇指拖动器。一切正常,除了点击目标非常小,因为它只是20x20视图。我正在寻找一种方法来提高这一点,让用户更容易与我的滑块交互。有没有办法在SwiftUI中做到这一点 我试着用Color.clear.overlay包裹拇指,并将边框设置为60x60。如果颜色为纯色,如红色,则此功能有效,但使用清除时,点击目标似乎恢复为20x20的可见像素 你可以在这张gif上看到,即使在拇指外侧点击,我也可以拖动滑块 但是,一旦我将颜色更改为“

我已经在SwiftUI中构建了一个自定义滑块,带有一个20x20的拇指拖动器。一切正常,除了点击目标非常小,因为它只是20x20视图。我正在寻找一种方法来提高这一点,让用户更容易与我的滑块交互。有没有办法在SwiftUI中做到这一点

我试着用
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