TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.65K subscribers
Post #395 1.21K
🔢 Полный контроль над списками: создаем свою замену List в SwiftUI.

Привет! Наткнулся на статью, где автор разбирает, почему List подходит не для всех случаев. Да, для однородных данных (например списка писем или задач) List незаменим. Но когда интерфейс становится сложнее - появляются разные типы карточек, нестандартные отступы, кастомные фоны - List начинает мешать. Специфичные модификаторы вроде listRowBackground или listRowInsets работают только внутри List и не дают гибкости.

Автор предлагает альтернативу - ScrollView с ленивыми стеками (LazyVStack / LazyHStack). За последние годы SwiftUI значительно подтянул их производительность. Если вы не отображаете сотни тысяч однородных строк, ScrollView - отличный выбор.


Что предлагает автор статьи:

🔵ScrollingSurface - простая обертка над ScrollView и ленивым стеком. Позволяет задать направление прокрутки и выравнивание. Автор использует ее как корневой контейнер для всех экранов своего приложения CardioBot.

🔵DividedCard - карточка с разделителями между дочерними элементами. Использует Group(subviews:) из Container View API, чтобы разобрать переданное содержимое, добавить Divider между элементами и обернуть все в фон с закругленными углами.

🔵SectionedSurface - обрабатывает секции внутри переданного содержимого. Использует ForEach(sections:), чтобы извлечь заголовки, контент и футеры, отфильтровать пустые секции и добавить отступы.

🔵NavigationButtonStyle - кастомный стиль кнопки, который добавляет шеврон справа, как в стандартном NavigationLink внутри List. Это мелочь, но без нее навигация выглядит неполноценно.


Как это собирается вместе:

В итоговом экране автор использует ScrollingSurface как корневой контейнер, внутри - SectionedSurface с секциями, а внутри секций - DividedCard с NavigationLink. Все это покрывается кастомным стилем кнопки. API получается очень похожим на стандартный List, но с полным контролем над внешним видом.


💡 Вывод:

Отказываться от List не нужно - он хорош для своих задач. Но когда интерфейс становится сложным и неоднородным, современный SwiftUI дает инструменты, чтобы построить свою замену. ScrollView с ленивыми стеками и Container View API позволяют создавать переиспользуемые компоненты, которые не уступают List в производительности, но дают полный контроль над дизайном. Если ваш интерфейс перерос стандартный List - присмотритесь к этому подходу.


➡️ Подписаться на канал
Мобильный трудоголик
  • 👍 17
  • 🙏 3
  • ❤ 1
  • 👀 1
More from @hardworkerit
  1. Oct 1, 2026🔢 Работа с Picture-in-Picture в iOS. Picture-in-Picture - системная функция iOS, которая…
  2. Sep 29, 2026🔢 Управление тулбарами на iPhone Duo. На iPhone Duo элементы управления навигацией, дейст…
  3. Sep 27, 2026🔢 Новые возможности Hashable в Swift 6.4 В Swift 6.4 добавили Hashable для нескольких тип…
  4. Sep 25, 2026🔢 Приватные свойства больше не ломают memberwise инициализатор в Swift 6.4 Swift автомати…
  5. Sep 24, 2026👨‍💻 Почему разработчики ненавидят своих менеджеров. Всем привет! Сегодня хочу разобрать…
  6. Sep 22, 2026🔢 Релиз Swift 6.4: главные изменения для разработчиков. Swift 6.4 вышел. Это обновление п…
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 →