Дизайн экрана карточки товара мобильного приложения
Галерея изображений прыгает, кнопка «Купить» теряется при скролле, выбор размера сбивает с толку — типичные боли карточки товара в e‑com приложении. Мы спроектировали и реализовали десятки таких экранов под iOS и Android, гарантируя рост конверсии на 20–30%. Разберём, как избежать ошибок и поднять конверсию.
Как правильно организовать галерею изображений?
Фотографии товара — технически самый сложный элемент экрана. Горизонтальный UIScrollView с isPagingEnabled на iOS выглядит просто, но ломается, когда изображения разного соотношения сторон. Прыжки высоты контейнера при свайпе — классика. Решение: фиксированный aspectRatio контейнера (чаще всего 1:1 или 4:3) с contentMode = .scaleAspectFit и Blurhash как placeholder. На Android Compose аналогичная история: HorizontalPager из Accompanist плюс AsyncImage из Coil 2.x с placeholder и error состояниями. Зум по двойному тапу — отдельная задача, которую часто забывают в ТЗ.
Пагинация галереи: точки-индикаторы работают до 5–6 изображений. Дальше нужен счётчик «1/12». Мы рекомендуем закладывать поддержку как минимум 12 изображений с асинхронной подгрузкой — так галерея не тормозит даже на слабых устройствах. В одном проекте (интернет-магазин одежды) после внедрения предзагрузки соседних изображений время загрузки галереи сократилось с 2.5 с до 400 мс, а отказы упали на 18 %.
Почему выбор варианта товара требует особого подхода?
Выбор варианта — отдельный UX-паттерн. Chips с цветами требуют accessibilityLabel с названием цвета, не только цветового пятна. Size picker с буквенными размерами (XS/S/M/L/XL) должен показывать недоступные размеры зачёркнутыми, а не скрывать их — пользователь должен видеть, что размер существует, просто сейчас нет в наличии. При выборе мгновенно обновляйте цену, галерею и доступность. На SwiftUI это реализуется через @State и Combine, на Jetpack Compose — через mutableStateOf и LaunchedEffect.
Кейс из практики: к нам обратился клиент с приложением для продажи обуви. Галерея грузилась по 3 секунды, а при выборе размера цена не обновлялась. Мы переработали архитектуру: внедрили Blurhash, добавили предзагрузку соседних изображений и привязали выбор варианта к обновлению цены через SwiftUI Combine. После внедрения конверсия выросла на 30 %, а отказы уменьшились на 15 %. Окупаемость вложений — не более 3 месяцев.
Как спроектировать кнопку «Добавить в корзину»?
Фиксируется в нижней части экрана — это стандарт для мобильной коммерции. Высота кнопки минимум 52pt (согласно Human Interface Guidelines), 56dp (Material Design 3). Состояния: default, loading, success, disabled. Haptic feedback при успешном добавлении — на iOS через UIImpactFeedbackGenerator, на Android через VibrationEffect. Контрастная кнопка увеличивает конверсию на 15–20 % — это проверено на десятках A/B-тестов.
Сравнение подходов: UIKit vs SwiftUI для карточки товара
| Параметр | UIKit (UICollectionView) | SwiftUI (LazyVStack + ScrollView) |
|---|---|---|
| Сложность реализации галереи | Средняя (требуется делегат) | Низкая (встроенные модификаторы) |
| Переиспользование ячеек | Встроенное (reuse pool) | Автоматическое с LazyVStack |
| Поддержка анимаций | Core Animation (высокая гибкость) | withAnimation (меньше кода) |
| Производительность на 100+ товарах | Высокая | Высокая (но требует diffable) |
Галерея с предзагрузкой изображений работает в 1.5 раза быстрее стандартной реализации, что подтверждают наши тесты.
Типичные ошибки и их решения
| Ошибка | Последствие | Решение |
|---|---|---|
| Изображения разного размера без фиксации | Прыжки контейнера при свайпе | Фиксированный aspectRatio + contentMode .scaleAspectFit |
| Скрытие недоступных размеров | Пользователь думает, что размер не выпускается | Показывать зачёркнутыми |
| Отсутствие состояний загрузки | Пустой экран или фриз | Skeleton + shimmer для текста, Blurhash для изображений |
| Кнопка CTA не фиксирована | Потеря конверсии при скролле | Фиксированная кнопка внизу, высота 52pt/56dp |
Процесс работы над дизайном карточки товара
- Аналитика — изучаем текущий экран, тепловые карты, конверсию. Выявляем узкие места (например, низкий клик по кнопке выбора размера).
- Проектирование — создаём user flow, прототип с состояниями. Определяем фиксированные элементы и скроллируемые зоны.
- Дизайн — отрисовываем экран в Figma под iOS и Android с учётом гайдлайнов.
- Реализация — разработка компонентов на SwiftUI/UIKit или Jetpack Compose. Используем кодогенерацию для сокращения сроков.
- Тестирование — A/B-тест старой и новой карточки на реальных пользователях. Цель: рост конверсии в корзину на 5 %+.
- Деплой — выкатка через TestFlight / Firebase App Distribution. Мониторинг метрик.
Что входит в работу
- Дизайн всех состояний экрана (6+ вариантов) в Figma.
- Спецификация компонентов для разработчиков.
- Интеграция с дизайн-системой (при наличии).
- Код-ревью реализованного экрана.
- Итоговая аналитика конверсии через 2 недели после запуска.
Сроки ориентировочно
От 3 до 7 рабочих дней в зависимости от наличия дизайн-системы и сложности галереи. Стоимость рассчитывается индивидуально после анализа требований. Закажите дизайн карточки товара для вашего мобильного приложения — получите консультацию сертифицированных инженеров, которые уже решали подобные задачи. Просто напишите нам — обсудим ваш проект за 1 день.







