返回

为你的 SwiftUI 应用添加平滑导航栏过渡

IOS

【代码实战】探索 SwiftUI 中的导航栏平滑过渡 #

从一个空项目开始

  1. 打开 Xcode,创建一个新的 SwiftUI 项目。
  2. 在 ContentView.swift 中,添加以下代码:
import SwiftUI

struct ContentView: View {
  @State private var selectedTab = 1

  var body: some View {
    TabView(selection: $selectedTab) {
      Text("First Tab")
        .tabItem {
          Label("First", systemImage: "house.fill")
        }
        .tag(1)

      Text("Second Tab")
        .tabItem {
          Label("Second", systemImage: "heart.fill")
        }
        .tag(2)
    }
  }
}

struct ContentView_Previews: PreviewProvider {
  static var previews: some View {
    ContentView()
  }
}

创建自定义 UINavigationBar

  1. 在项目中创建一个新的 Swift 文件,命名为 "CustomNavigationBar.swift"。
  2. 在文件中添加以下代码:
import SwiftUI

struct CustomNavigationBar: View {
  @Binding var selectedTab: Int

  var body: some View {
    ZStack {
      Color("CustomNavigationBarColor")

      HStack {
        Button(action: {
          selectedTab = 1
        }) {
          Image(systemName: "house.fill")
            .foregroundColor(selectedTab == 1 ? .white : .gray)
        }

        Button(action: {
          selectedTab = 2
        }) {
          Image(systemName: "heart.fill")
            .foregroundColor(selectedTab == 2 ? .white : .gray)
        }
      }
      .frame(maxWidth: .infinity)
    }
    .frame(height: 44)
  }
}

使用自定义 UINavigationBar

  1. 在 ContentView.swift 中,将 NavigationBarTitle("My App") 替换为 CustomNavigationBar(selectedTab: $selectedTab)。
import SwiftUI

struct ContentView: View {
  @State private var selectedTab = 1

  var body: some View {
    TabView(selection: $selectedTab) {
      Text("First Tab")
        .tabItem {
          Label("First", systemImage: "house.fill")
        }
        .tag(1)

      Text("Second Tab")
        .tabItem {
          Label("Second", systemImage: "heart.fill")
        }
        .tag(2)
    }
    .navigationBarTitle("")
    .navigationBarItems(leading: CustomNavigationBar(selectedTab: $selectedTab))
  }
}

运行项目

现在运行项目,您应该会看到一个带有自定义导航栏的 SwiftUI 应用。当您在选项卡之间切换时,导航栏会以平滑的动画过渡。

总结

在这篇文章中,我们探索了如何在 SwiftUI 应用中创建自定义的 UINavigationBar,并实现平滑的导航栏过渡效果。这可以为您的应用带来流畅和现代化的视觉体验。