SwiftUI的导航界面的嵌套问题

在SwiftUI中,有一种控件叫做NavigationView。这种控件是一个容器,里面通常包含多个NavigationLink,用于点击后切换到下一个界面。

这样的切换,根据代码书写方式不同,有可能是整个页面切换,也可能是页面的一部分切换。

先给出代码和效果。

代码包括三个文件:

  1. 主程序
swift 复制代码
import SwiftUI

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
  1. ContentView(首页)
swift 复制代码
import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView(content: {
            NavigationLink(destination: NavigateView1()) 
            { Text("Navigate 1") }
        })
    }
}

#Preview {
    ContentView()
}
  1. NavigateView1(下一页)
swift 复制代码
import SwiftUI

struct NavigateView1: View {
    var body: some View {
        NavigationView(content: {
            NavigationLink(destination: Text("Destination")) { Text("Navigate nested") }
        })
        NavigationLink(destination: Text("Destination")){
            Text("Navigate not nested")
        }
    }
}

#Preview {
    NavigateView1()
}

效果:

第一张图,点击了Navigate nested,然后最顶上的左箭头仍然保留,下方的Navigate not nested仍然保留。中间那个Navigate nested占用的一大片区域跳转到了新的Destination页面,上方有另一个箭头。从最右的图中可以看出,这个Destination界面有两个左箭头,也就是说它把两层目录嵌套在了同一张屏幕上。

第二种图,点击了Navigate not nested,整个屏幕都切换到了Destination页面。

之所以有这样的区别,原因在于第三块Swift代码,即NavigateView1的代码。

Navigation1里有两个NavigationLink,其中第一个是嵌在NavigationView里的,另一个是独立的。前面说到NavigationView是一个容器,所以当它里面的NavigationLink被点击时,只有容器里的内容才切换至新页面,容器外不影响。但不在NavigationView容器里的NavigationLink被点击时,整个页面都切换。

相关推荐
xiaoye-duck21 小时前
《C++ 项目:手写大模型接入 SDK》Gemini接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
nice_lcj5201 天前
Java Lambda 表达式入门:怎么写、怎么用、常用方法有哪些
java·开发语言·后端·面试
码农小河661 天前
基于SSM+JSP+MySQL的在线医疗服务系统的设计与实现
java·开发语言·mysql
nice_lcj5201 天前
ThreadLocal 入门:它是怎么隔离数据的、为什么会导致内存泄漏
java·开发语言·后端·面试·并发编程·内存泄漏·threadlocal
紧跟先前的步伐1 天前
Go AI Agent 实战 28|Agent 的预算、超时与停止条件
开发语言·人工智能·后端·ai·golang
bksczm1 天前
InnoDB 行格式详解:DYNAMIC / COMPACT / COMPRESSED / REDUNDANT
java·开发语言·数据库
春涧草茶1 天前
慢就是快16-1协程
开发语言·前端·python
Dovis(誓平步青云)1 天前
启元 T1 Pro 人机相声搭档:语音-触摸双通道的启元机器人节奏引擎设计
开发语言·前端·javascript·microsoft·交互
做科研的周师兄1 天前
【R语言实战】MixSIAR 氢氧同位素水源解析全流程:从混合空间校验到贝叶斯 MCMC 收敛诊断(后附完整代码)
java·大数据·开发语言
.痞老板.1 天前
java ee--计算机是如何工作的
java·开发语言·java-ee