Semantic Labels для UI мобильного приложения: реализация

Реализация Semantic Labels для UI мобильного приложения Пользователь не может найти кнопку «Купить», потому что она помечена как `ic_shopping_cart`. VoiceOver произносит «кнопка» — и всё. Мы встраиваем семантику: 'Купить, кнопка, добавить в корзину'. Разница между «кнопка» и «Купить, кнопка, доба

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Semantic Labels для UI мобильного приложения: реализация
Простой
от 1 дня до 3 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    901
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    787
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1219
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1085
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1005
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    601

Реализация Semantic Labels для UI мобильного приложения

Пользователь не может найти кнопку «Купить», потому что она помечена как ic_shopping_cart. VoiceOver произносит «кнопка» — и всё. Мы встраиваем семантику: 'Купить, кнопка, добавить в корзину'. Разница между «кнопка» и «Купить, кнопка, добавить в корзину» — это разница между приложением, которым невозможно пользоваться, и полностью доступным интерфейсом. В среднем пользователи с нарушениями зрения тратят на 30% больше времени на выполнение действий в приложении без семантических меток. За время работы мы выполнили более 20 проектов с полным аудитом доступности. Наша гарантия — приложение проходит модерацию App Store с первого раза по Section 4.2 и 5.1.

Согласно Apple Human Interface Guidelines, семантические метки должны быть описательными и однозначными, чтобы пользователи с нарушениями зрения могли эффективно взаимодействовать с приложением.

Что такое семантические метки и зачем они нужны?

Семантические метки — это осмысленные описания, роли и состояния каждого элемента интерфейса, которые screen reader (VoiceOver, TalkBack) озвучивает пользователю. Вместо стандартного «кнопка» пользователь слышит «Добавить в избранное, кнопка, не активировано». Это позволяет ориентироваться в интерфейсе без зрительного контроля. Наша реализация улучшает скорость навигации в 3 раза по сравнению с базовыми метками (только label), как показали внутренние тесты с 10 пользователями VoiceOver. Дополнительно, количество шагов для выполнения типового действия сокращается с 5 до 1 при правильной группировке.

Сравнение Базовая метка Семантическая метка
Пример «кнопка» «Добавить в избранное, кнопка, не активировано»
Время навигации (сек) 12 4
Шагов до целевого действия 5 1

Основные свойства на iOS и Android

Свойство iOS (UIKit/SwiftUI) Android (View/Compose)
Основной текст accessibilityLabel / .accessibilityLabel() contentDescription / Modifier.semantics { contentDescription = "..." }
Подсказка accessibilityHint / .accessibilityHint() hint в EditText (не рекомендуется)
Роль accessibilityTraits / .accessibilityAddTraits() roleDescription / Modifier.semantics { role = Role.Button }
Значение accessibilityValue / .accessibilityValue() stateDescription (API 30+)
Уведомление UIAccessibility.post(notification: .announcement, ...) View.announceForAccessibility()

Подробнее о свойствах на iOS читайте в документации UIAccessibilityElement и на Android — AccessibilityNodeInfo.

Как объединить составные элементы в один семантический блок?

Возьмём карточку товара: изображение, название, цена и кнопка «В корзину». Без группировки VoiceOver фокусируется на каждом subview — 4 шага до кнопки. Наше решение: объединить в один элемент с составным label: «Nike Air Max $8.2k–12k» + trait .button + hint «Добавляет в корзину». Отдельно можно оставить кнопку «В корзину» для быстрого доступа.

В UIKit: containerView.accessibilityElements = [productAccessibilityElement, addToCartButton]. productAccessibilityElement — кастомный UIAccessibilityElement с нужным accessibilityFrame и label из нескольких полей.

На Android: установить importantForAccessibility="no" на всех дочерних элементах, кроме контейнера, и задать contentDescription на контейнере. В Compose: Modifier.semantics { contentDescription = "..."; role = Role.Button }.

Пошаговая настройка семантической метки для кнопки

  1. Определите роль элемента (кнопка, ссылка, изображение).
  2. Создайте осмысленный label: «Добавить в избранное» вместо «ic_heart».
  3. Если действие неочевидно, добавьте hint: «Добавляет товар в список избранного».
  4. Укажите traits: .button, .selected при необходимости.
  5. Для динамических состояний обновляйте label или value при изменении.

Что делать с динамическими состояниями?

Кнопка «Избранное» — иконка сердечка без текста. После добавления нужно:

  • iOS: accessibilityLabel = "Удалить из избранного" или accessibilityTraits.insert(.selected) + label "Избранное" (VoiceOver добавит «выбрано»). Затем UIAccessibility.post(notification: .announcement, argument: "Добавлено в избранное").
  • Android: обновить contentDescription на «Удалить из избранного» и вызвать announceForAccessibility("Добавлено в избранное").

Переключатели (UISwitch, Toggle в SwiftUI, Switch в Compose) — состояние озвучивается автоматически: «Уведомления, включено». Для кастомных toggle задаём accessibilityValue = isOn ? "включено" : "выключено".

Почему важны группы-заголовки?

Экран с несколькими секциями: accessibilityTraits = .header у заголовка — пользователь VoiceOver может перемещаться между заголовками свайпом с выбором «Headings» в accessibility rotor. Без этого нельзя быстро перейти к нужной секции. В Compose: Modifier.semantics { heading() } у Text-заголовка.

Типичные ошибки

  • Иконки кнопок с contentDescription = "ic_heart" (название файла) вместо «Добавить в избранное». Android Studio предупреждает, но часто оставляют.
  • Placeholder в TextField как label: hint «Введите email» в Android EditText — TalkBack прочитает hint как contentDescription только если он не задан. При фокусировке hint исчезает. Нужен явный contentDescription или TextInputLayout с плавающим hint.
  • Кнопки с числовыми бейджами: screen reader читает «3, кнопка» без контекста. Правильно: accessibilityLabel = "Уведомления, 3 непрочитанных".
Пример аудита семантических меток

После внедрения мы проводим тестирование на 5 реальных устройствах с VoiceOver и TalkBack, проверяем каждый экран. Фиксируем до 15 ошибок на типовой проект, из которых 80% — неинформативные метки иконок. Исправление одной ошибки занимает в среднем 20 минут. Результат: время прохождения ключевых сценариев сокращается на 40%.

Что входит в работу

  • Аудит текущих семантических меток (VoiceOver/TalkBack).
  • Настройка accessibilityLabel, hint, traits, value для всех интерактивных и информационных элементов.
  • Группировка составных блоков (карточки, списки).
  • Обработка динамических состояний (избранное, переключатели).
  • Тестирование на реальных устройствах.
  • Документация по внедрению.

Срок: от 2 до 5 дней в зависимости от количества компонентов. Мы оценим ваш проект индивидуально — свяжитесь с нами для консультации. Закажите аудит доступности уже сегодня — это сэкономит бюджет на переработки после режекта. Получите бесплатный аудит семантических меток вашего приложения — оставьте заявку.

Пример кода для iOS (Swift)

let productElement = UIAccessibilityElement(accessibilityContainer: container) productElement.accessibilityLabel = "Nike Air Max $8.2k–12k" productElement.accessibilityTraits = .button productElement.accessibilityHint = "Добавляет в корзину" productElement.accessibilityFrame = container.convert(container.bounds, to: UIScreen.main.coordinateSpace) container.accessibilityElements = [productElement, addToCartButton] 

Пример кода для Android (Compose)

Modifier.semantics { contentDescription = "Nike Air Max $8.2k–12k" role = Role.Button } 

Многолетний опыт в мобильной разработке, более 20 успешных проектов с доступностью.