该库为 SwiftUI 提供了一个自定义容器视图,作为标准 NavigationStack 的替代方案。 它旨在通过摆脱 UINavigationController 和 UINavigationBar 的行为,从而提高屏幕导航期间转换的自定义性。
要使用该库,您需要使用三个主要符号:Stack、StackLink 和 StackUnwindLink。
import SwiftUIStack
var body: some View {
Stack {
// Your views here...
}
}
StackLink(transition: .slide, value: someValue) {
Text("Navigate to detail view")
}
您还可以使用唯一的标识符和命名空间在 transition 参数中设置匹配的转换
StackLink(transition: .matched(identifier: user.id, in: local), value: someValue) {
Text("Navigate to detail view with matched transition")
}
StackUnwindLink {
Text("Back to previous view")
}
在堆叠的视图中,您可以作为 EnvironmentValue 访问 unwindContext。 您可以将 unwindContext 传递给 StackUnwindLink。 这允许您显式指定触发 unwind 的堆栈。
@Environment(\.stackUnwindContext) var unwindContext
StackUnwindLink(target: .specific(unwindContext)) {
Text("Back to Menu")
}
StackUnwindLink 现在支持不同的导航模式。 要导航回目标堆栈的根目录,请使用 .all 模式。
StackUnwindLink(mode: .all) {
Text("Back to Root")
}
当您需要在层级结构的多个级别之间发送消息时,此技术非常有用。 通过将 unwindContext 与 StackUnwindLink 结合使用,您可以有效地在嵌套堆栈之间进行通信,并浏览视图层级结构的不同级别。
该库目前仅支持通过 Swift Package Manager 进行安装。
要将包添加到您的项目中,您可以手动将其添加到您的 Package.swift 文件中
dependencies: [
.package(url: "https://github.com/FluidGroup/swiftui-stack.git", from: "1.0.0")
]
(包括贡献于项目的说明,例如打开 issues、提交 pull requests 以及任何其他相关信息)
该项目在 Apache License 2.0 许可下获得许可。 有关更多信息,请参见 LICENSE 文件。