UITabBarController — это системный контроллер UIKit, предназначенный для организации интерфейса с несколькими независимыми разделами приложения. Позволяет пользователям переключаться между различными функциональными модулями.
// Базовый пример создания
let tabController = UITabBarController()
tabController.viewControllers = [homeVC, searchVC, profileVC]
window?.rootViewController = tabController
View Hierarchy:
UITabBar (нижняя панель вкладок)UIView для содержимого активного VCUITabBarItem для каждой вкладкиУправление вкладками:
viewControllers (порядок соответствует отображению)selectedIndex для программного переключенияselectedViewController для доступа к текущему VCКлючевые методы:
setViewControllers(_:animated:) — установка вкладокaddChild(_:) — ручное добавление контроллера// Пример настройки вкладок
let homeItem = UITabBarItem(title: "Главная", image: UIImage(systemName: "house"), tag: 0)
homeVC.tabBarItem = homeItem
Ленивая загрузка:
Жизненный цикл:
viewWillAppear/viewDidDisappearСостояние:
Внешний вид:
tabBar.tintColor — цвет активной вкладкиtabBar.barTintColor — цвет фонаДинамическое обновление:
// Пример добавления badge
tabController.viewControllers?[1].tabBarItem.badgeValue = "3"
UITabBarsizeThatFits и layoutSubviewsКастомные реализации:
UICollectionView как TabBarКомбинированные подходы:
UINavigationController в каждой вкладке| Преимущества | Ограничения |
|---|---|
| Четкое разделение функциональности | Ограниченное количество вкладок (обычно ≤5) |
| Быстрый доступ к разделам | Жесткая структура расположения |
| Поддержка глубоких ссылок | Сложная кастомизация поведения |
| Нативная производительность |
Более 5 вкладок:
Комбинация с другими контроллерами:
// Пример комбинации с UINavigationController
let navController = UINavigationController(rootViewController: homeVC)
tabController.viewControllers = [navController, searchVC, profileVC]
UITabBarController — это стандартный и мощный инструмент для организации модульного интерфейса в iOS-приложениях, обеспечивающий удобную навигацию между функционально независимыми разделами. Оптимален для приложений с четко выраженными независимыми модулями, где важна быстрая переключаемость между разделами.