立即改善您项目中的导航。保持代码简洁
Mijick 的 NavigationView 是一个强大的开源库,专为 SwiftUI 设计,使导航过程变得非常简单和清晰。
平台 | 最低 Swift 版本 |
---|---|
iOS 15+ | 5.0 |
Swift Package Manager 是一种用于自动化 Swift 代码分发的工具,并已集成到 Swift 编译器中。
一旦您设置了 Swift 包,将 NavigationView 添加为依赖项就像将其添加到您的 Package.swift
的 dependencies
值一样简单。
dependencies: [
.package(url: "https://github.com/Mijick/NavigationView", branch(“main”))
]
Cocoapods 是 Swift 和 Objective-C Cocoa 项目的依赖项管理器,可帮助优雅地扩展它们。
安装步骤
pod init
Podfile
中pod 'MijickNavigationView'
.xcworkspace
文件pod install
.xcworkspace
在您的 @main
结构内部,使用作为导航堆栈根视图的视图调用 implementNavigationView
方法。该视图必须是 NavigatableView
类型。该方法采用一个可选参数 - config
,可用于配置将放置在导航堆栈中的所有视图的某些属性。
@main struct NavigationView_Main: App {
var body: some Scene {
WindowGroup {
ContentView()
.implementNavigationView(config: nil)
}
}
}
Mijick 的 NavigationView 提供了将任何符合 NavigatableView
协议的视图推送到导航堆栈的能力。
struct ExampleView: NavigatableView {
...
}
用内容填充您的视图
struct ExampleView: NavigatableView {
var body: some View {
VStack(spacing: 0) {
Text("Witaj okrutny świecie")
Spacer()
Button(action: pop) { Text("Pop") }
}
}
...
}
此步骤是可选的 - 如果您愿意,您可以跳过此步骤并保持配置为默认值。
每个视图都有自己的一组方法,可用于为堆栈中的每个视图创建独特的外观。
struct ExampleView: NavigatableView {
func configure(view: NavigationConfig) -> NavigationConfig { view.backgroundColour(.red) }
var body: some View {
VStack(spacing: 0) {
Text("Witaj okrutny świecie")
Spacer()
Button(action: pop) { Text("Pop") }
}
}
...
}
只需从选定的位置调用 ExampleView().push(with:)
。 就这么简单!
struct SettingsViewModel {
...
func openSettings() {
...
ExampleView().push(with: .verticalSlide)
...
}
...
}
有两种方法可以做到这一点
pop
、pop(to type:)
、popToRoot
之一struct ExampleView: NavigatableView {
...
func createButton() -> some View {
Button(action: popToRoot) { Text("Tap to return to root") }
}
...
}
NavigationManager
方法之一NavigationManager.pop()
NavigationManager.pop(to type:)
,其中 type 是您要返回的视图的类型NavigationManager.popToRoot()
我们快完成了,但我们想描述您可能喜欢的另外三种方法
setAsNewRoot
方法,您可以更改导航堆栈的根ExampleView()
.push(with: .verticalSlide)
.setAsNewRoot()
EnvironmentObject
,但请记住在将视图推送到堆栈之前执行此操作ExampleView()
.environmentObject(object)
.push(with: .verticalSlide)
onFocus
,而不是 onAppear
onFocus
方法struct ExampleView: NavigatableView {
var body: some View {
VStack(spacing: 0) {
Text("Witaj okrutny świecie")
Spacer()
Button(action: pop) { Text("Pop") }
}
.onFocus(self) {
// Do something
}
}
...
}
通过克隆我们创建的项目,亲身体验一下它是如何工作的
NavigationView 在 MIT 许可证下发布。 有关详细信息,请参阅 LICENSE。
PopupView - 最强大的弹出库,允许您显示任何弹出窗口
CalendarView - 立即创建您自己的日历对象
GridView - 毫不费力地布局您的数据
CameraView - 最强大的 CameraController。 专为 SwiftUI 设计
Timer - Timer 的现代 API