stack

SwiftUI 的自定义堆栈导航

该库为 SwiftUI 提供了一个自定义容器视图,作为标准 NavigationStack 的替代方案。 它旨在通过摆脱 UINavigationController 和 UINavigationBar 的行为,从而提高屏幕导航期间转换的自定义性。

特性

入门

要使用该库,您需要使用三个主要符号:Stack、StackLink 和 StackUnwindLink。

用法示例

  1. 在您的 SwiftUI 视图文件中导入 SwiftUIStack 模块
import SwiftUIStack
  1. 在您的视图层级结构中使用 Stack 容器
var body: some View {
  Stack {
    // Your views here...
  }
}
  1. 使用 StackLink 创建导航链接,并指定您想要的转换和目标
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")
}
  1. (可选)使用 StackUnwindLink 创建返回到前一个视图的导航链接
StackUnwindLink {
  Text("Back to previous view")
}

Unwind 上下文

在堆叠的视图中,您可以作为 EnvironmentValue 访问 unwindContext。 您可以将 unwindContext 传递给 StackUnwindLink。 这允许您显式指定触发 unwind 的堆栈。

@Environment(\.stackUnwindContext) var unwindContext

StackUnwindLink(target: .specific(unwindContext)) {
  Text("Back to Menu")
}

StackUnwindLink 模式

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 文件。