Многие годы разработчики
iOS испытывали смешанные чувства при виде таких интерфейсов, как мини-плеер в приложении
Apple Music или постоянная панель действий в
Podcasts. С одной стороны - это удобный и интуитивный паттерн, с другой - его реализация всегда была головной болью, требующей неочевидных трюков с
safeAreaInsets и ручной подгонкой размеров. С выходом
iOS 26 эта эпоха подошла к концу.
Apple официально представила
API для создания нижних аксессуаров в
UITabBarController, и это одно из тех изменений, которое кардинально упрощает жизнь.
Прощайте, костыли. Здравствуй, декларативность:
До
iOS 26 интеграция любого статичного или плавающего элемента поверх таббара была упражнением в нетривиальной геометрии. Разработчики были вынуждены вручную управлять
additionalSafeAreaInsets, отслеживать повороты устройства, адаптировать
layout под разные состояния навигации (например, появление клавиатуры) и гарантировать, что кастомная вью не перекроет таббар и его элементы. Новый
API bottomAccessory решает эту проблему радикально простым и элегантным способом. Все что требуется - это создать экземпляр
UITabAccessory, передав ему ваше кастомное представление, и установить его в свойство контроллера.
let miniPlayerView = MiniPlayerView() // Кастомная вью
let accessory = UITabAccessory(contentView: miniPlayerView)
tabBarController.bottomAccessory = accessory
Система берет на себя всю ответственность за позиционирование, анимации при появлении/скрытии (через метод
setBottomAccessory(_:animated:)) и корректное взаимодействие с жестами. Это переход от императивного «как это разместить» к декларативному «что я хочу показать».
Гармония с поведением таббара - новый уровень интеграции:
Инновация не ограничивается простым добавлением вью.
Apple обеспечила глубокую интеграцию аксессуара с обновленным поведением самого
UITabBar. Теперь таббар может автоматически сворачиваться в компактный вид (например, при скролле контента), и аксессуар реагирует на это изменение согласованно. Поведением управляет свойство
tabBarMinimizeBehavior, которое предлагает гибкие опции: от автоматического решения системой до явных триггеров вроде скролла вниз или вверх.
Адаптивный интерфейс через tabAccessoryEnvironment:
Одной из самых тонких проблем при создании подобных элементов была адаптация их внешнего вида к разным состояниям. Нужно ли показывать полный заголовок трека или только иконку? Как изменить
layout при компактном таббаре? Для этого
Apple ввела новый
trait -
UITabAccessory.Environment. Теперь вью может запросить у
traitCollection текущее окружение (.regular, .inline, .none) и кардинально изменить свой вид или внутреннюю композицию.
contentLayoutGuide - надежный фундамент для контента:
Чтобы окончательно устранить ручные расчеты отступов,
Apple добавила в
UITabBarController новый
UILayoutGuide -
contentLayoutGuide. Привязка контента основного вью-контроллера к этому
guide, автоматически гарантирует, что он всегда будет располагаться в корректной области: выше системных элементов нижней части интерфейса. Этот guide динамически обновляет свои размеры при изменениях состояния таббара, появлении клавиатуры или изменении ориентации.
Вывод:
Введение
bottomAccessory в
iOS 26 - это не просто добавление еще одного свойства в
API. Это значительный шаг вперед в философии UI-разработки под
iOS.
Apple признает популярные пользовательские паттерны и предоставляет для них первоклассные, системные инструменты, заменяя годы накопленных хаков и обходных приемов. Это снижает порог входа для создания сложных интерфейсов, повышает стабильность приложений и позволяет разработчикам сосредоточиться на логике и дизайне, а не на борьбе с фреймворком.