Tab Bar é um elemento de navegação localizado na parte inferior da tela de um aplicativo móvel, que fornece acesso rápido às seções principais. No iOS é implementado via UITabBarController, no Android via BottomNavigationView do Material Design. Saiba mais sobre os princípios de navegação nas Diretrizes de Interface Humana da Apple.
Principais Conclusões
Um Tab Bar (barra de abas) é um elemento de interface gráfica localizado na parte inferior da tela de um aplicativo móvel. Ele fornece acesso rápido a 3–5 seções principais do aplicativo. Cada seção é representada por um ícone e um rótulo de texto. O usuário toca em uma aba para alternar para a seção correspondente. O Tab Bar permanece visível em todas as telas dentro de cada seção, fornecendo um ponto de entrada constante.
A Apple recomenda usar um Tab Bar para seções de igual importância. As Diretrizes de Interface Humana (2026) afirmam: "O Tab Bar exibe de 3 a 5 abas. Se mais forem necessárias, a última aba se torna um item "Mais" contendo as restantes." O Material Design do Google (2026) recomenda a Bottom Navigation para o mesmo propósito — 3 a 5 itens, com a aba ativa destacada por cor e animação.
Ao contrário da barra de abas superior, o painel inferior é mais conveniente para operação com uma mão — o polegar alcança naturalmente a parte inferior da tela. Um estudo do Nielsen Norman Group (2025) mostrou que a navegação inferior reduz o tempo de conclusão de tarefas em 22% em comparação com a navegação superior em smartphones com tela de 6 polegadas ou mais.
UITabBarController é um controlador iOS integrado para organizar a navegação através de abas. Cada aba gerencia seu próprio conjunto de telas, normalmente organizadas em um UINavigationController. O UITabBarController cria automaticamente um Tab Bar na parte inferior da tela com um fundo translúcido do sistema e animação de alternância.
import UIKit
class MainTabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let homeVC = HomeViewController()
let searchVC = SearchViewController()
let profileVC = ProfileViewController()
homeVC.tabBarItem = UITabBarItem(
title: "Início",
image: UIImage(systemName: "house.fill"),
tag: 0
)
searchVC.tabBarItem = UITabBarItem(
title: "Pesquisar",
image: UIImage(systemName: "magnifyingglass"),
tag: 1
)
profileVC.tabBarItem = UITabBarItem(
title: "Perfil",
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]
}
}Cada aba no exemplo contém um UINavigationController, permitindo navegação em pilha dentro da seção. O tabBarItem configura o ícone, título e badge. O sistema aplica automaticamente o estilo SF Symbols para os ícones — símbolos padrão da Apple com suporte a tipo dinâmico e multicolor.
BottomNavigationView é um componente Android da Material Design Library que implementa o painel de navegação inferior. No Android 13+ é usado o NavigationBarView — seu sucessor com animação melhorada e comportamento adaptativo. O BottomNavigationView segue a especificação Material Design 3 (Material You) e suporta temas de aplicativo, cores dinâmicas e animações de alternância.
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)
// Vinculando BottomNavigation ao NavController
navView.setupWithNavController(navController)
// Configurando um badge na aba de notificações
val badge = navView.getOrCreateBadge(R.id.navigation_notifications)
badge.isVisible = true
badge.number = 12
}
}O componente BottomNavigationView suporta Material Design 3 com três estilos: default (rótulo + ícone), labeled (rótulo maior) e unlabeled (apenas ícone). O método setupWithNavController vincula o painel ao Navigation Component, atualizando automaticamente a aba ativa ao mudar de tela. Badges são criados via getOrCreateBadge e suportam indicadores numéricos e de ponto.
Badges são indicadores numéricos ou de ponto nos ícones das abas, exibindo o número de notificações, novas mensagens ou tarefas. No iOS, o badge é definido através da propriedade badgeValue no UITabBarItem. No Android, badges são gerenciados via BadgeDrawable (Material 3) ou getOrCreateBadge no NavigationBarView.
Badges são uma ferramenta poderosa de engajamento: a pesquisa da Localytics (2025) mostrou que aplicativos com badges têm 18% mais retenção no 7º dia. No entanto, o uso excessivo de badges (mais de 3 ao mesmo tempo) reduz o CTR em 12%. Apple e Google recomendam mostrar badges apenas para notificações relevantes e redefini-los ao abrir a seção.
| Plataforma | Componente | Definir um Badge |
|---|---|---|
| iOS | UITabBarItem.badgeValue | tabBarItem.badgeValue = "5" |
| Android | BadgeDrawable | badge.number = 5 |
| iOS | Badge de ponto | tabBarItem.badgeColor = .red |
| Android | Indicador de ponto | badge.isVisible = true |
Ambas as plataformas oferecem amplas opções de personalização do Tab Bar. No iOS, você pode alterar a cor de fundo, a cor tint da aba ativa, a fonte do rótulo e adicionar ícones personalizados via SF Symbols ou assets próprios. No Android, a personalização inclui estilos Material 3, animação de alternância, efeito ripple e cores dinâmicas baseadas no papel de parede.
// Personalização do Tab Bar no iOS
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.No Android, a personalização do BottomNavigationView é feita através de atributos XML ou programaticamente. O Material 3 introduz o conceito de cores dinâmicas: a paleta de cores é gerada a partir do papel de parede do usuário e aplicada automaticamente aos componentes. O desenvolvedor pode sobrescrever as cores através do tema, definir uma animação de indicador personalizada e configurar o efeito ripple.
// Personalização do BottomNavigationView no Android
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")
)
}
// Em XML: app:menu="@menu/bottom_nav_menu"
// Em XML: app:itemActiveIndicatorStyle="@style/Widget.Material3.BottomNavigationView.ActiveIndicator"Ao projetar um Tab Bar, é importante seguir as recomendações da plataforma e as pesquisas de usabilidade. Apple HIG: não mais de 5 abas, texto conciso, ícones semânticos. Material Design: 3 a 5 itens, item ativo destacado, contador de badge não superior a 99. NN Group (2025): a navegação inferior deve permanecer visível em todas as telas de uma seção, caso contrário o usuário perde o contexto.
Erros comuns: 6 ou mais abas (obriga a usar "Mais" — reduz a descobribilidade), alterar a ordem das abas durante a navegação (desorienta o usuário), ocultar a Tab Bar em telas aninhadas (perda da âncora de navegação). As melhores práticas incluem ordem fixa, ícones e rótulos de texto consistentes, badges apenas para ações do usuário (não para marketing).
Perguntas Frequentes
Apple e Google recomendam de 3 a 5 abas. Menos de três — não há seções suficientes para justificar o painel inferior. Mais de cinco — sobrecarga cognitiva, a última aba se torna um item "Mais". O número ideal segundo o NN Group (2025) é de 4 abas.
Tab Bar é o termo da Apple para o painel inferior do iOS (UITabBarController). Bottom Navigation é o equivalente no Android (BottomNavigationView). Funcionalmente são idênticos: acesso rápido a 3–5 seções. As diferenças estão no estilo visual: iOS — fundo translúcido com blur, Android — cor fixa com efeito ripple.
Sim, mas com cuidado. No iOS — hidesBottomBarWhenPushed = true no UIViewController. No Android — View.GONE no BottomNavigationView. A melhor prática é ocultar apenas em telas de tela cheia (visualização de fotos, vídeo) e restaurá-la ao retornar. Ocultar prolongadamente desorienta o usuário.
No iOS, defina tabBarItem.badgeValue = "N" (como string). No Android, use getOrCreateBadge(resId) no NavigationBarView. O badge é exibido automaticamente como um círculo vermelho com um número. Para limpar: badgeValue = nil (iOS), removeBadge(resId) ou badge.isVisible = false (Android).
Em dispositivos com Home Indicator (iPhone X e mais recentes), a Tab Bar é automaticamente elevada acima do indicador. O sistema adiciona Safe Area Insets na parte inferior da tela. O desenvolvedor não precisa ajustar manualmente as margens — UIKit e Android SystemUI lidam com isso automaticamente.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também