Tab Bar — 什么是标签栏,移动应用中的标签栏面板

作者: IT Sectr 发布日期: 2026-02-22 阅读时间: 12 分钟

Tab Bar — 位于移动应用屏幕底部的导航元素,可快速访问主要部分。在 iOS 上通过 UITabBarController 实现,在 Android 上通过 BottomNavigationView Material Design 实现。有关导航原则的更多信息,请阅读 Human Interface Guidelines Apple

主要要点

  • Tab Bar — 用于在应用的 3–5 个主要部分之间切换的底部导航栏
  • UITabBarController — 用于管理标签页的标准 iOS 组件,具有系统外观
  • BottomNavigationView — 来自 Material Design Library 的 Android 底部导航组件
  • 徽章 — 标签图标上的数字指示器,用于显示通知
  • 自定义 — 图标、颜色、字体和切换动画通过平台 API 配置

什么是 Tab Bar?

Tab Bar(标签栏) — 位于移动应用屏幕底部的图形界面元素。它提供对应用 3–5 个主要部分的快速访问。每个部分由一个图标和文本标签表示。用户点击标签以切换到相应部分。Tab Bar 在每个部分内的所有屏幕上保持可见,提供恒定的入口点。

Apple 建议将 Tab Bar 用于重要性相同的应用部分。Human Interface Guidelines(2026)指出:「Tab Bar 显示 3–5 个标签。如果需要更多 — 最后一个标签变为「更多」点,其余包含在内」。Google 的 Material Design(2026)推荐 Bottom Navigation 用于相同目的 — 3–5 个点,活动标签通过颜色和动画突出显示。

与顶部标签(Top Tab Bar)不同,底部面板更适合单手操作 — 拇指自然够到屏幕底部。Nielsen Norman Group(2025)的研究表明,在屏幕对角线为 6 英寸及以上的智能手机上,底部导航比顶部导航的任务完成时间缩短了 22%。

iOS 中的 UITabBarController

UITabBarController — iOS 内置的用于通过标签组织导航的控制器。每个标签管理自己的屏幕集,通常组织在 UINavigationController 中。UITabBarController 在屏幕底部自动创建 Tab Bar,具有系统半透明背景和切换动画。

swift
import UIKit

class MainTabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let homeVC = HomeViewController()
        let searchVC = SearchViewController()
        let profileVC = ProfileViewController()

        homeVC.tabBarItem = UITabBarItem(
            title: "首页",
            image: UIImage(systemName: "house.fill"),
            tag: 0
        )
        searchVC.tabBarItem = UITabBarItem(
            title: "搜索",
            image: UIImage(systemName: "magnifyingglass"),
            tag: 1
        )
        profileVC.tabBarItem = UITabBarItem(
            title: "个人资料",
            image: UIImage(systemName: "person.circle.fill"),
            tag: 2
        )

        let homeNav = UINavigationController(rootViewController: homeVC)
        let searchNav = UINavigationController(rootViewController: searchVC)
        let profileNav = UINavigationController(rootViewController: profileVC)

        viewControllers = [homeNav, searchNav, profileNav]
    }
}

示例中的每个标签都包含 UINavigationController,允许在部分内使用堆栈导航。tabBarItem 配置图标、标题和徽章。系统自动为图标应用 SF Symbols 样式 — 支持动态类型和多色功能的 Apple 标准符号。

Android 中的 BottomNavigationView

BottomNavigationView — 来自 Material Design Library 的 Android 组件,实现底部导航面板。在 Android 13+ 中使用 NavigationBarView — 其后续版本,具有改进的动画和自适应行为。BottomNavigationView 遵循 Material Design 3(Material You)规范,支持应用主题、动态颜色和切换动画。

kotlin
class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val navView: NavigationBarView = binding.navView
        val navController = findNavController(R.id.nav_host_fragment)

        // 将 BottomNavigation 连接到 NavController
        navView.setupWithNavController(navController)

        // 在通知标签上配置徽章
        val badge = navView.getOrCreateBadge(R.id.navigation_notifications)
        badge.isVisible = true
        badge.number = 12
    }
}

BottomNavigationView 组件支持 Material Design 3 的三种样式:default(标签 + 图标)、labeled(放大标签)和 unlabeled(仅图标)。setupWithNavController 方法将面板连接到 Navigation Component,在屏幕变化时自动更新活动标签。徽章通过 getOrCreateBadge 创建,支持数字和点状指示器。

Tab Bar 上的徽章和指示器

徽章 — 标签图标上的数字或点状指示器,显示通知、新消息或任务的数量。在 iOS 中,徽章通过 UITabBarItem 上的 badgeValue 属性设置。在 Android 中,徽章通过 BadgeDrawable(Material 3)或 NavigationBarView 中的 getOrCreateBadge 管理。

徽章是强大的参与工具:Localytics(2025)的研究表明,带有徽章的应用在第 7 天的留存率高出 18%。然而,过度使用徽章(同时超过 3 个)会使点击率降低 12%。Apple 和 Google 建议仅对相关通知显示徽章,并在打开部分时将其重置。

平台组件设置徽章
iOSUITabBarItem.badgeValuetabBarItem.badgeValue = "5"
AndroidBadgeDrawablebadge.number = 5
iOS点状徽章tabBarItem.badgeColor = .red
Android点状指示器badge.isVisible = true

自定义 Tab Bar:图标、颜色、动画

两个平台都为自定义 Tab Bar 提供了广泛的可能性。在 iOS 中,可以更改背景颜色、活动标签的色调、标签字体,并通过 SF Symbols 或自己的资源添加自定义图标。在 Android 中,自定义包括 Material 3 样式、切换动画、涟漪效果和基于壁纸的动态颜色。

swift
// 在 iOS 中自定义 Tab Bar
let appearance = UITabBarAppearance()
appearance.backgroundColor = .systemBackground
appearance.stackedLayoutAppearance.normal.titleTextAttributes = [
    .foregroundColor: UIColor.secondaryLabel,
    .font: UIFont.systemFont(ofSize: 11)
]
appearance.stackedLayoutAppearance.selected.titleTextAttributes = [
    .foregroundColor: UIColor.systemBlue,
    .font: UIFont.boldSystemFont(ofSize: 12)
]
tabBar.standardAppearance = appearance.

在 Android 中,BottomNavigationView 的自定义通过 XML 属性或编程方式完成。Material 3 引入了动态颜色的概念:调色板从用户的壁纸生成并自动应用于组件。开发人员可以通过主题覆盖颜色,设置自定义下划线动画(indicator)并配置涟漪效果。

kotlin
// 在 Android 中自定义 BottomNavigationView
val navView = findViewById<NavigationBarView>(R.id.nav_view)

with (navView) {
    labelVisibilityMode = NavigationBarView.LABEL_VISIBILITY_LABELED
    itemActiveIndicatorStyle = R.style.CustomIndicator
    itemRippleColor = ColorStateList.valueOf(
        Color.valueOf("#FFE0B2")
    )
}

// 在 XML 中:app:menu="@menu/bottom_nav_menu"
// 在 XML 中:app:itemActiveIndicatorStyle="@style/Widget.Material3.BottomNavigationView.ActiveIndicator"

底部导航的最佳实践

在设计 Tab Bar 时,遵循平台建议和可用性研究非常重要。Apple HIG:不超过 5 个标签,简洁文本,语义图标。Material Design:3–5 个点,活动点突出显示,徽章计数器不超过 99。NN Group(2025):底部导航应在部分的所有屏幕上保持可见,否则用户会失去上下文。

主要错误:6 个以上标签(强制使用「更多」 — 降低可发现性),导航时标签顺序改变(迷失方向),在嵌套屏幕上隐藏 Tab Bar(失去导航锚点)。最佳实践 — 固定顺序,统一图标和文本标签,徽章仅用于用户操作(不用于营销)。

  • 3–5 个标签 — 快速选择且不过载的最佳数量
  • 固定顺序 — 标签应保持稳定,无需动态重新排列
  • 图标 + 标签 — 两个元素都有助于理解部分
  • 活动标签 — 应在颜色、图标或动画上视觉上不同
  • 徽章 — 用于通知,打开部分时重置

常见问题

Tab Bar 应该有多少个标签?

Apple 和 Google 推荐 3–5 个标签。少于三个 — 没有足够的部分来证明底部面板的合理性。超过五个 — 注意力超载,最后一个标签变为「更多」点。根据 NN Group(2025)的数据,最佳数量是 4 个标签。

Tab Bar 和 Bottom Navigation 有什么区别?

Tab Bar — Apple 对 iOS 底部面板(UITabBarController)的术语。Bottom Navigation — 在 Android 中的对应物(BottomNavigationView)。功能上相同:快速访问 3–5 个部分。视觉风格上的差异:iOS — 带有模糊效果的半透明背景,Android — 带有涟漪效果的固定颜色。

可以在某些屏幕上隐藏 Tab Bar 吗?

可以,但要谨慎。在 iOS 中 — UIViewController 上的 hidesBottomBarWhenPushed = true。在 Android 中 — BottomNavigationView 上的 View.GONE。最佳实践 — 仅在全屏屏幕(查看照片、视频)上隐藏,但在返回时恢复。长时间隐藏会让用户迷失方向。

如何向 Tab Bar 标签添加徽章?

在 iOS 中设置 tabBarItem.badgeValue = "N"(作为字符串)。在 Android 中使用 NavigationBarView 上的 getOrCreateBadge(resId)。徽章自动显示为带有数字的红色圆圈。重置:badgeValue = nil(iOS),removeBadge(resId)或 badge.isVisible = false(Android)。

为什么 Tab Bar 在 iPhone X+ 上被隐藏?

在带有 Home Indicator 的设备上(iPhone X 及更新机型),Tab Bar 会自动升高到指示器上方。系统在屏幕底部添加 Safe Area Insets。开发人员无需手动调整边距 — UIKit 和 Android SystemUI 会自动处理。

总结

  • Tab Bar — 用于 3–5 个标签的底部导航栏,iOS 和 Android 的标准元素
  • UITabBarController(iOS)和 BottomNavigationView(Android)— 平台实现
  • 徽章 — 标签上的数字指示器用于通知,将留存率提高 18%
  • 自定义 包括两个平台上的颜色、图标、字体和切换动画
  • 最佳实践 — 固定顺序,图标 + 标签,3–5 个标签,在所有屏幕上可见
  • Tab Bar + Navigation — 每个标签通常包含用于嵌套屏幕的堆栈导航器
  • Safe Area — 底部面板在无边框设备上自动适应 Home Indicator

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读