TGViewer
AppFiles - Mobile Development AppFiles - Mobile Development @applib · 2.18K subscribers
Post #3950 333
FabBar - панель вкладок с Liquid Glass и плавающей кнопкой действия

Во многих приложениях есть основное действие, которое пользователи выполняют часто: создание публикации в социальных сетях, запись приема пищи, создание задачи. Размещение этого действия в нижней части экрана позволяет держать его в зоне большого пальца и постоянно видеть, уменьшая неудобства для наиболее распространенного пользовательского сценария.

В iOS 26 с панелью вкладок разработчики могут объявить вкладку с ролью .search и использовать ее в качестве основного действия, но у этого подхода есть несколько проблем:

• Вы обманываете систему, это на самом деле не вкладка поиска.
• VoiceOver читает ее как вкладку, а не как кнопку.
• Требуется слушатель изменений вкладок и их отмена в SwiftUI, что подвержено состояниям гонки.
• Отсутствует возможность изменения цвета, поэтому это выглядит как вкладка поиска, а не как основное действие.

У разработчиков есть еще один вариант: размещение пользовательской плавающей кнопки действия над панелью вкладок. Обычно она размещается в правой части экрана. Однако в iOS 26 с центрированной панелью вкладок это создает неудобную компоновку. При наличии менее четырех вкладок по обе стороны панели остается пустое пространство, а размещение кнопки FAB на крае создает несбалансированное пустое пространство. При этом нет возможности настроить расположение или размер стандартной панели вкладок, чтобы обойти это.

FabBar предлагает одно решение: полностью пересоздать панель вкладок для полного контроля.

Как это работает

FabBar предоставляет API SwiftUI, но внутри использует UIKit.

Ключевая проблема в точном воссоздании панели вкладок — это эффект «пузырькового» интерактивного стекла при касании. Этот эффект доступен только для панелей вкладок и еще одного компонента: сегментированных элементов управления. FabBar использует UISegmentedControl в качестве основы, скрывая стандартные метки и накладывая пользовательские представления элементов вкладок.

Почему UIKit? FabBar манипулирует внутренней иерархией представлений UISegmentedControl, чтобы скрыть собственные метки и наложить пользовательские представления. Это невозможно с помощью Picker из SwiftUI. Кроме того, смешивание пользовательских элементов управления UIKit с методом .glassEffect() из SwiftUI вызывает проблемы с частотой кадров во время сенсорного взаимодействия.

Этот подход по своей природе ненадежен и может перестать работать после обновлений ОС. 

FabBar на GitHub: https://github.com/ryanashcraft/FabBar
Платформа: iOS
⭐️: 76

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
More from @applib
  1. Oct 15, 2026AsoBeast - self-hosted ASO-инструмент для отслеживания ключевых слов в App Store и Google…
  2. Oct 14, 2026Куда девается место на диске: Xcode, рабочие деревья и ИИ-агенты Несколько недель назад мо…
  3. Oct 14, 2026Как эффективно отлаживать код, когда вы перестали его понимать С развитием AI-кодинга возн…
  4. Oct 14, 2026CodexKit - SDK для создания агентов CodexKit — это SDK на Swift для встраивания агентов в…
  5. Oct 13, 2026Куда делись все вакансии для Android-разработчиков? Я всё думаю о том, насколько иначе рын…
  6. Oct 13, 2026Мы научили агента писать тесты так, как их пишет наша команда Каждому iOS-разработчику зна…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →