gpt4 book ai didi

swiftui - List SwiftUI 中的每行是否可以有多个 NavigationLinks?

转载 作者:行者123 更新时间:2023-12-03 13:50:54 25 4
gpt4 key购买 nike

我不能在列表的同一行中使用多个 NavigationLink。

看起来导航堆栈完全搞砸了,因为你点击一次,它会转到多个 View ,然后不规则地返回......

在 TestList 中,我尝试在 Sections 中添加单独的 NavigationLinks,并且尝试将 NavigationLinks 移动到 View 层次结构中的两个不同位置...

我已经尝试为列表的每一行添加两个 NavigationViews,但是
那么导航标题栏在我需要时不会消失..


struct ContentView: View {
var body: some View {

NavigationView {
TestList()
}


}
}


struct TestList: View {
var body: some View {

List {
ListCellView()

}

}
}


struct ListCellView: View {

var body: some View {
VStack {
Spacer()

NavigationLink(destination: TestDestination1()) {
Text("Test Destination 1")
.frame(width: 140, height: 50)
.background(RoundedRectangle(cornerRadius: 7.0).strokeBorder(Color.green, lineWidth: 3.0))
}

Spacer()

NavigationLink(destination: TestDestination2()) {
Text("Test Destination 2")
.frame(width:140, height: 50)
.background(RoundedRectangle(cornerRadius: 7.0).strokeBorder(Color.purple, lineWidth: 3.0))
Spacer()
}
}
}
}


struct TestDestination1: View {
var body: some View {
Text("Test Destination 1")
}
}

struct TestDestination2: View {
var body: some View {
Text("Test Destination 2")
}
}



我希望当您点击 NavigationLink 时,它会导航到目标 View 。

当两个 NavigationLinks 位于 List 的同一行并且您点击它时,会发生以下情况:
1.转到其中一个 View
2. 点击“返回”后,它会带您返回 View ,然后带您到另一个目标 View 。

https://youtu.be/NCTnqjzJ4VE

最佳答案

正如其他人提到的,为什么在 1 个单元格中有 2 个 NavigationLinks。问题在于 Cell 的多个按钮和手势。我猜每个单元格预计最多 1 个 Button/NavigationLink。正如您所注意到的,在您的视频中,您点击了一个 NavigationLink,但您的整个 Cell 得到了手势(突出显示),这反过来会影响其他 Buttons/NavigationLinks。

无论如何,你可以让它在 1 个单元格中的 2 个 NavigationLinks 中工作,并进行黑客攻击。下面我创建了 SGNavigationLink,我将其用于我自己的应用程序来解决您的问题。它只是简单地替换了 NavigationLink 并基于 TapGesture,因此您将失去亮点。

注意:我稍微修改了您的 ListCellView,因为我的 SGNavigationLink 中的 Spacer 正在造成内部崩溃。

struct ListCellView: View {

var body: some View {
VStack {

HStack{
SGNavigationLink(destination: TestDestination1()) {
Text("Test Destination 1")
.frame(width: 140, height: 50)
.background(RoundedRectangle(cornerRadius: 7.0).strokeBorder(Color.green, lineWidth: 3.0))
}

Spacer()
}

HStack{
SGNavigationLink(destination: TestDestination2()) {
Text("Test Destination 2")
.frame(width:140, height: 50)
.background(RoundedRectangle(cornerRadius: 7.0).strokeBorder(Color.purple, lineWidth: 3.0))

}
Spacer()
}
}
}
}



struct SGNavigationLink<Content, Destination>: View where Destination: View, Content: View {
let destination:Destination?
let content: () -> Content


@State private var isLinkActive:Bool = false

init(destination: Destination, title: String = "", @ViewBuilder content: @escaping () -> Content) {
self.content = content
self.destination = destination
}

var body: some View {
return ZStack (alignment: .leading){
if self.isLinkActive{
NavigationLink(destination: destination, isActive: $isLinkActive){Color.clear}.frame(height:0)
}
content()
}
.onTapGesture {
self.pushHiddenNavLink()
}
}

func pushHiddenNavLink(){
self.isLinkActive = true
}
}

关于swiftui - List SwiftUI 中的每行是否可以有多个 NavigationLinks?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57857516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com