我希望能够通过在具有多个导航链接的NavigationView上向左/向右滑动来更新视图。这些NavigationLinks链接到不同的演示视图。
当我在最外面的视图上开始拖动手势时,如果该手势始于NavigationLink上,则该链接会更改颜色,就好像已经按下一样。继续拖动手势,主视图会按预期更新,并且NavigationLink会返回其正常状态(颜色)。
我需要的是一种方法,使得当进行拖动手势时,NavigationLink不会更改颜色。也许有一种方法可以使NavigationLink对“长按”之类的触摸作出反应。
以下是演示我所见情况的一些代码。这不是我的实际项目,而是一个非常简化的例子。
欢迎任何建议或解决方案!
import SwiftUI
struct ContentView: View {
@State var outputText: String = ""
var body: some View {
VStack(alignment: .center, spacing: 20) {
NavigationView {
VStack {
Text("Navigation View")
NavigationLink(destination: Text("Showwing Widget")) {
HStack {
Text("Navigation Link")
}
.frame(width: 300, height: 200)
.border(Color.blue)
}
.border(Color.red)
Spacer()
}
.border(Color.yellow)
}
Text(outputText)
.font(.title)
.fontWeight(.bold)
Text("My Green Oval")
.foregroundColor(.white)
.fontWeight(.bold)
.font(.title)
.frame(width: 300, height: 200)
.background(
Ellipse()
.fill(Color.green)
)
Button(action: {
outputText = "Button tapped"
}) {
Text("Button to Tap")
}
Text("Just some words...")
Spacer()
}
.highPriorityGesture(DragGesture(minimumDistance: 25, coordinateSpace: .local)
.onEnded { value in
if abs(value.translation.height) < abs(value.translation.width) {
if abs(value.translation.width) > 50.0 {
if value.translation.width < 0 {
self.swipeRightToLeft()
} else if value.translation.width > 0 {
self.swipeLeftToRight()
}
}
}
}
)
}
func swipeRightToLeft() {
outputText = "Swiped Right to Left <--"
}
func swipeLeftToRight() {
outputText = "Swiped Left to Right -->"
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}