SwiftUI 带动画的自定义标签栏如何实现页面导航跳转?
实现位置说明
你当前编写的CustomTabBarNew和TabBarButton已经完整实现了标签选中状态切换、交互动画的能力,不需要修改这两个结构体的内部代码,导航逻辑统一在承载自定义标签栏的父视图中实现,也就是你预览中用到的HomeNewView这类外层容器视图。
最优实现方案建议
- 第一步:在父视图中声明状态变量作为标签选中状态的数据源,默认值设为首页对应的图标字符串:
@State private var selectedTab: String = "house"
- 第二步:在父视图的布局中,通过
Switch条件判断当前selectedTab的值,渲染对应的页面视图,需要传参的页面直接在这一步传入对应数据即可:
var body: some View { VStack(spacing: 0) { // 标签切换对应的内容区域 switch selectedTab { case "house": HomeView() case "cloud.sun": // 携带数据传入目标页面 TargetView(needData: yourDataSource) case "paperplane": MessageView() case "plus.app": AddView() default: SettingView() } // 自定义标签栏固定在底部 CustomTabBarNew(selectedTab: $selectedTab) } .ignoresSafeArea(.keyboard, edges: .bottom) }
- 第三步(可选优化):把硬编码的标签字符串替换成枚举类型,避免拼写错误,提升可维护性:
enum TabItem: String, CaseIterable { case home = "house" case weather = "cloud.sun" case message = "paperplane" case add = "plus.app" case setting = "gearshape" }
只需要把selectedTab的类型改为TabItem,同步调整CustomTabBarNew内的selectedTab绑定类型、判断逻辑即可。
内容的提问来源于stack exchange,提问作者HannesB.
相关产品推荐
相关产品推荐

