列表 SwiftUI 中的每行是否可以有多个 NavigationLink?

2023-11-25

我无法在列表的同一行中使用多个 NavigationLink。

看起来导航堆栈完全混乱了,因为你点击一次,它就会进入多个视图并不稳定地返回......

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

我尝试为列表的每一行添加两个 NavigationView,但是 然后当我需要它时,navigationTitleBar不会消失..


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 时,它将导航到目标视图。

发生的情况是,当两个 NavigationLink 位于列表的同一行并且您点击它时,它将: 1. 转到其中一个视图 2. 点击“返回”后,它将带您返回到该视图,然后带您到另一个目标视图。

https://youtu.be/NCTnqjzJ4VE


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

不管怎样,你可以让它工作,1 个单元格中的 2 个导航链接,只需一个 hack。下面我创建了 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
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列表 SwiftUI 中的每行是否可以有多个 NavigationLink? 的相关文章

  • 在一个 SwiftUI 视图中相同的 ForEach 循环两次

    当我在视图中对数组使用 ForEach 循环两次时 我在运行时收到以下警告 LazyVGridLayout the ID 84308994 9D16 48D2 975E DC40C5F9EFFF is used by multiple ch
  • 工作表关闭后 SwiftUI 导航栏项目框架未对齐

    在 SwiftUI 中关闭工作表后 导航栏按钮不可点击 以下是重现该问题的步骤 出示一张单子 将应用程序移至后台一小段时间 2 秒 恢复应用程序并向下滑动关闭工作表 现在导航栏按钮框架未对齐 点击的工作框架与按钮的可见框架不同 这在 iOS
  • 在 SwiftUI 中,如何执行手势但将手势转发到其后面的视图?

    我正在创建一个工具提示系统 如果用户触摸工具提示之外的任何地方 我想关闭工具提示 我希望这样在工具提示之外的触摸既可以消除工具提示 又可以激活用户点击的任何控件 因此 您可以打开一个工具提示 然后仍然单击工具提示外部的按钮 并在第一次点击时
  • HStack 中的 SwiftUI EditButton 未激活编辑模式

    作为更大表单的一部分 我希望有一个带有列表的部分 其条目可以重新排序 在整个视图中 应该只能编辑该特定列表 而不能编辑其他内容 因此我希望将编辑按钮放在列表附近 如果我只是将 EditButton 设置为节标题 则可以对列表项重新排序 但无
  • 如何使用 SwiftUI 获取多个屏幕上的键盘高度并移动按钮

    以下代码获取键盘显示时的键盘高度 并将按钮移动键盘高度 在转换源 ContentView 和转换目标 SecibdContentView 处以相同的方式执行此移动 但按钮在转换目标处不移动 如何使按钮在多个屏幕上移动相同 import Sw
  • 调用 SwiftUI 中位置 #11、#12 处的额外参数 [重复]

    这个问题在这里已经有答案了 我在 SwiftUI 中的切换开关上不断收到 调用中位置 11 12 处有额外参数 错误 我见过其他人有 调用中的额外参数 错误 但答案似乎没有帮助 另外 我的错误是 位置 11 12 我还没有看到其他人发生这种
  • 导航栏隐藏在 SwiftUI 中不起作用

    我有三观 我想隐藏第三个视图中的导航栏 即使我给 navigationBarHidden true 导航栏正在显示 我找不到我哪里做错了 我已在下面附上我的代码和生成的屏幕截图 Xcode 版本 11 1 struct ContentVie
  • SwiftUI 上带有 TextField 的可删除表

    环境 Xcode 11 2 1 11B500 Problem 为了在 SwiftUI 中实现带有 TextField 的可编辑表格 我使用了ForEach 0
  • Swift UI 导出画布内容

    我有一个画布 用户可以在上面画东西 我想导出用户在画布上绘制的任何内容 并且我正在使用以下扩展从视图中获取图像 extension View func snapshot gt UIImage let controller UIHosting
  • 捕获 SwiftUI 中的错误

    我在某些视图中有一个按钮 它调用 ViewModel 中可能引发错误的函数 Button action do try self taskViewModel createInstance name self name catch Databa
  • 如何使用 SwiftUI @ViewBuilder 创建需要参数的视图?

    在我的问题的答案中如何将通用 SwiftUI 视图添加到另一个视图 https stackoverflow com q 73571940 777861 我了解到这可以通过使用来完成 ViewBuilder 虽然这对于我的大多数用例都适用 但
  • 在 SwiftUI 中使用获取视图的宽度

    我需要获取渲染视图的宽度SwiftUI 这显然没那么容易 我的看法是 我需要一个返回视图尺寸的函数 就这么简单 var body some View VStack alignment leading Text timer name font
  • 如何将一个 SwiftUI View 作为变量传递给另一个 View 结构

    我正在实施一个very自定义 NavigationLink 称为MenuItem并希望在整个项目中重用它 它是一个符合以下条件的结构体View并实施var body some View其中包含一个NavigationLink 我需要以某种方
  • 如何使用 iOS16 删除 SwiftUI Plain List 中的节标题顶部填充

    当我们使用 SwiftUI List 组件并需要一个节标题时 顶部填充将出现在每个节的标题上 iOS15下 我们使用UITableView appearance sectionHeaderTopPadding 0来解决这个问题 查看附件截屏
  • SwiftUI 导航:如何将详细信息视图切换到不同的项目?

    我正在努力实现以下导航行为 用户可以从列表中选择一个项目 该项目会触发该项目的详细信息视图 在此详细视图上 导航栏中有一个 添加 按钮 可打开用于添加其他项目的模式表 到目前为止 一切都按预期进行 但添加项目后 我希望详细视图显示新项目 我
  • Xcode 11 beta swift ui 预览未显示

    只是使用 Swift UI 基本应用程序 即使我处于画布模式 预览画布也不会显示 应用程序运行 我有这个小片段 我错过了什么 if DEBUG struct ContentView Previews PreviewProvider stat
  • SwiftUI - iOS 15.0 中已弃用“windows”:使用 UIWindowScene.windows

    我有以下代码块 struct StackOverflow View var body some View Text Hello World padding bottom UIApplication shared windows first
  • SwiftUI 查看所有视图,包括工作表视图

    我需要根据某些条件在所有视图之上显示一个视图 无论顶视图是什么 我正在尝试以下代码 struct TestView
  • ScrollView 内的 GeometryReader 会折叠 GeometryReader,无论子尺寸如何

    我正在尝试创建一个包含绘图的子视图 我希望该绘图的大小与父容器的一部分成比例 除非将其放入层次结构上方的滚动视图中 否则效果很好 从屏幕截图中可以看出 堆栈内部的声音正如预期的那样最大 但是 当您放入滚动视图时 几何读取器的大小会折叠到接近
  • ScrollView 内的 SwiftUI 列表

    我想将列表放在 ScrollView 中 以便可以一起滚动列表行和标题 但我发现 ScrollView 中的 List 不起作用 它什么也没显示 我应该同时使用它们 我应该使用 ScrollView 这样当我滚动行时 我可以使标题 图像或文

随机推荐