NavigationView - 简化SwiftUI导航的开源库





项目名称:NavigationView

项目简介

NavigationView是一个强大的开源库,专为SwiftUI设计,用于简化iOS应用中的导航过程。它提供了完整的动画支持、手势操作、记住当前滚动视图偏移、提高代码质量等功能,并且特别强调稳定性和性能。

功能特点

  • 自定义动画:支持任何自定义动画。

  • 手势支持:可以为选定的屏幕轻松启用导航手势。

  • 记住滚动视图偏移:库自动保存当前滚动视图偏移。

  • 提高代码质量:只需一行代码即可在屏幕间导航。

  • 稳定性:强调可靠性和性能,解决开发者在使用原生NavigationView时遇到的问题。

安装指南

NavigationView支持iOS 15+和Swift 5.0+,可以通过Swift Package Manager或Cocoapods安装。

Swift Package Manager

Package.swift中添加以下依赖:

dependencies: [
    .package(url: "https://github.com/Mijick/NavigationView", branch(“main”))
]

Cocoapods

Podfile中添加以下依赖:

pod 'MijickNavigationView'

使用方法

1. 设置库

在你的 @main 结构中,使用 implementNavigationView 方法并传入作为导航栈根视图的视图。该视图必须是 NavigatableView 类型。该方法接受一个可选参数 - config,可用于配置将放置在导航栈中的所有视图的某些属性。

@main struct NavigationView_Main: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
               .implementNavigationView(config: nil)                    
        }
    }
}

2. 声明一个视图以推送到导航栈

NavigationView by Mijick 提供了将任何遵循 NavigatableView 协议的视图推送到导航栈的能力。

struct ExampleView: NavigatableView {
    ...
}

3. 实现 body

用内容填充你的视图

struct ExampleView: NavigatableView {    
    var body: some View {
        VStack(spacing: 0) {
            Text("欢迎来到这个世界")
            Spacer()
            Button(action: pop) { Text("返回") } 
        }
    }
    ...
}

4. 实现 configure(view: NavigationConfig) -> NavigationConfig 方法

这一步是可选的 - 如果你愿意,你可以跳过这一步并保留默认配置。

每个视图都有自己的一组方法,可以用来为栈中的每个视图创建独特的外观。

struct ExampleView: NavigatableView {   
    func configure(view: NavigationConfig) -> NavigationConfig { view.backgroundColour(.red) }
    var body: some View {
        VStack(spacing: 0) {
            Text("欢迎来到这个世界")
            Spacer()
            Button(action: pop) { Text("返回") } 
        }
    }
    ...
}

5. 在代码的任何位置展示你的视图!

只需从选定的位置调用 ExampleView().push(with:)。就这么简单!

struct SettingsViewModel {
    ...
    func openSettings() {
        ...
        ExampleView().push(with: .verticalSlide)
        ...
    }
    ...
}

6. 关闭你的视图 - 这更简单!

有两种方法可以做到这一点:

  • 通过在任何视图中调用 poppop(to type:)popToRoot 方法

    struct ExampleView: NavigatableView {
        ...
        func createButton() -> some View {
            Button(action: popToRoot) { Text("点击返回根视图") } 
        }
        ...
    }

  • 通过调用静态 NavigationManager 方法:

    • NavigationManager.pop()

    • NavigationManager.pop(to type:) 其中 type 是你想返回的视图类型

    • NavigationManager.popToRoot()

7. 等等,还有更多!

我们差不多完成了,但我们想介绍三个你可能喜欢的附加方法:

  • 使用 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("欢迎来到这个世界")
                Spacer()
                Button(action: pop) { Text("返回") } 
            }
            .onFocus(self) {
                // 做一些事情
            }
        }
        ...
    }

 

扩展

NavigationView作为一个开源项目,开发者可以在此基础上增加更多功能,比如支持更多的导航动画、集成更多的第三方库或者增加对新iOS版本的支持。此外,项目也可以作为学习SwiftUI导航模式和路由管理的实例,对于希望深入了解这些技术的开发人员来说,是一个很好的学习资源。

或许喜欢

ActivityIndicatorView:SwiftUI 创建的预设加载指示器库

ActivityIndicatorView 是一个 SwiftUI 库,提供多种预设的加载动画指示器,支持自定义样式和动画,适用于 iOS、watchOS、tvOS 和 macOS 平台。

最近更新 2024-12-11

LightDarkMode-ToggleStyle:SwiftUI自定义开关样式与动画

LightDarkMode-ToggleStyle是一个SwiftUI开源项目,提供自定义开关样式和流畅动画效果,适用于iOS应用的UI设计和交互优化。

最近更新 2025-01-07

RichTextKit:Swift和SwiftUI中编辑富文本的SDK

RichTextKit是一个Swift SDK,支持在Swift和SwiftUI中编辑富文本,具备文本样式、字体、颜色等多种功能,并提供跨平台的RichTextEditor。

最近更新 2024-12-09

热榜

Made with in Shangrao,China By 老雷

Copyright © devler.cn 1987 - Present

赣ICP备19009883号-1