Вкладки в середине экрана
Можно ли разместить вкладки (tabs) не в верхней части экрана, а, например, в середине? Стандартный TabView всегда располагает вкладки вверху, но в вашем случае над ними находится другой контент. К тому же есть требования к поведению контента вкладок:
- Высота содержимого каждой вкладки должна рассчитываться автоматически, а не быть фиксированной.
- При переключении между вкладками высота активного блока должна динамически меняться в зависимости от его содержимого.
- Блоки, расположенные ниже вкладок, должны плотно прилегать к активному контенту (без пустот и разрывов).
То есть стандартный TabView не подходит, так как он привязан к верхнему краю и не позволяет гибко управлять положением. Вы долго искали решение, но ничего подходящего не нашли. Ниже предлагаем возможные подходы.
Возможные решения
- Кастомная реализация на SwiftUI: Создайте собственный компонент вкладок, используя
Stateдля отслеживания активной вкладки иGeometryReaderдля динамического вычисления высоты на основе контента. Это даст полный контроль над расположением и анимацией. - Использование ScrollView и VStack: Разместите переключатели вкладок и контент внутри
ScrollViewсVStack. Контент каждой вкладки упаковывается в отдельный блок, который отображается или скрывается по условию, автоматически подстраивая высоту. - Библиотеки сторонних разработчиков: Существуют готовые решения (например,
TabViewс настраиваемыми модификаторами), но большинство из них не поддерживают размещение вкладок в произвольном месте без дополнительных обёрток.
Рекомендуется первый вариант - кастомная реализация. Она обеспечит точное соответствие требованиям: вкладки будут находиться в нужном месте, а высота контента будет вычисляться автоматически, без лишних промежутков.