- PVSM.RU - https://www.pvsm.ru -

Железный дизайнер из Redmadrobot Design Lab Артур Абраров делится наблюдениями.
Адаптировать дизайн под другую платформу — неотъемлемая часть работы дизайнера мобильных приложений. Цель этой работы — органично вписать дизайн в паттерны взаимодействия пользователя. К тому же, проработанная адаптация упрощает разработку за счёт использования нативных компонентов платформы.
Чтобы адаптировать дизайн правильно, нужно соблюдать гайдлайны платформ: Human Interface Guidelines [1] (HIG) у iOS и Material Design [2] у Android. И общаться с разработчиками, в идеале подключать их к дизайну как можно раньше, чтобы они могли сразу задать технические ограничения.
Но в чём именно отличается дизайн под iOS от дизайна под Android? В этой статье я разберу 32 конкретных отличия дизайна под iOS и Android. Они поделены на четыре группы:
Особенности iOS будут слева, а Android — справа или сверху/снизу.
Почти все отличия этой статьи взяты из анализа этих гайдлайнов. Их суть на идейном уровне следующая. HIG — это про плоский, лёгкий, дружелюбный дизайн, пришёл он из постепенного отказа от скевоморфизма [3].
Material же имеет несколько основополагающих принципов: материал как метафора; смелый, графический, сознательный; осмысленная анимация; гибкая основа и кроссплатформенность. Если вы не знакомы с гайдлайнами, лучше их прочесть до того, как ознакомитесь со статьёй.


Дизайн iOS-приложения создаётся в pt [4], а Android-приложения — в dp [5]. Мы, как правило, создаём дизайн в 1x (или mdpi) и выгружаем в Zeplin. Zeplin отображает для iOS дизайн в pt и генерирует иконки и иллюстрации в 2х и 3х. Под Android отображает дизайн в dp и генерирует графику в hdpi, xhpdi, xxhdpi и xxxhdpi.


Предпочитаю проектировать iOS-приложение под наименьший размер — iPhone 5 с размером экрана 320pt х 568pt. Делаю это, чтобы избежать некорректного отображения контента на маленьких экранах. Некоторые предпочитают проектировать под iPhone 8.
Под Android есть общепринятый [6] размер экрана — 360dp х 640dp.
При дизайне под iOS иногда создаю дизайн и под iPhone X (375pt х 812 pt). Это нужно, чтобы разработчик понимал, как правильно расставить отступы у экрана этого размера. Ещё при дизайне под iPhone X нужно помнить про Safe are [7]a — зону, вне которой не стоит размещать контент.

Если не знаете, какой шрифт использовать в приложении, берите системный. В случае iOS — это San Francisco [8]. А Android — Roboto [9].
![]() |
![]() |
В отличие от iOS, у Android есть встроенный инструмент навигации назад. Это Android Navigation Bar [10].

Он либо физически встроен в смартфон, либо является частью интерфейса. С помощью стрелки пользователь перемещается на один шаг назад в хронологической последовательности (reverse chronological navigation [11]). Навигация происходит как внутри приложения, так и между ними.
В начале профессионального пути в качестве дизайнера мобильных приложений я долго мучил Android-разработчиков вопросом: зачем нужны две кнопки назад? Одна есть внизу в Navigation Bar, вторая появляется в Top App Bar при переходе на дочернюю страницу.
Ответ такой. Есть два вида навигации назад: reverse chronological navigation (её осуществляем с помощью стрелки назад в Navigation Bar, зовем её Back).

И upward navigation (её осуществляем с помощью верхней стрелки, зовем её Up).

Представим, что у нас есть путь A-B-C, где A — это материнская страница, а B и С — дочерние. Представим, что пользователь попал напрямую из A в С. Если он нажмёт на кнопку Back, то вернётся на A. Но если нажмёт Up, то сначала попадёт на B — и уже по второму нажатию попадёт на A.
Это сложно реализовать и путанно для пользователя, поэтому сейчас эти две кнопки назад осуществляют одинаковое действие back, как в iOS. То есть если пришли из A в С, то из С вернёмся обратно в А.
В iOS принципиально нет теней. Как исключение, тени можно обнаружить на главном экране App Store и в Health. Но в целом HIG никак не прописывает использование теней.
В Material тени играют [12] большую роль. Они добавляют интерфейсу третье пространство (ось Z), за счёт чего у каждого компонента появляется своё строгое место на этой оси (от 0 dp до 24 dp). Причём эта ось Z существует не просто на идейном уровне: у разработчиков есть параметр elevation, в котором они задают положение компонента по этой оси.

Навигация и смена состояний сопровождается изменением elevation компонентов. Поэтому при дизайне под Android нам стоит осознанно подходить к созданию теней.
Отличий в нейминге много. Предлагаю рассмотреть эти пять.
Это bar для верхнеуровневой навигации по приложению. Статично находится внизу экрана на обеих платформах. Помимо нейминга они отличаются и в поведении. Его разберём чуть позже.
![]() |
![]() |
Этот bar у обеих платформ выполняет примерно одинаковые задачи: сообщает пользователю его текущее местоположение в приложении, даёт возможность вернуться на предыдущий экран и предлагает одно или несколько контекстных действий. Подробнее об отличиях — ниже в статье.

Помимо нейминга у Tabs Android есть несколько особенностей: между табами можно перемещаться по свайпу, и Material разрешает использовать их для верхнеуровневой навигации.
![]() |
![]() |
Интересно, что в iOS описан только один инструмент предупреждения пользователя — Alerts [13]. В Android их три [14]: Snackbars, Banners и Dialogs.
Snackbar предназначен для сообщений низкой приоритетности и не требует действий. Dialogs блокирует взаимодействие с интерфейсом и требует совершить действие. Banners находятся между ними: не блокирует взаимодействие, но требует совершить действие.
![]() |
![]() |
Это лишь один из примеров разного нейминга технологий, которые используются на этих платформах. Их стоит знать, так как помимо нейминга они отличаются множеством технических особенностей их реализации. Понимание отличий в нейминге — первый шаг к пониманию отличий технологий.
![]() |
![]() |
Начнём с самого верха. iOS рекомендует только один способ верхнеуровневой навигации — через Tab bar [15]. У Android в ответ есть три способа: Navigation Drawer [16], Bottom Navigation Bar [17]и Tabs [18].

Если количество верхнеуровневых страниц больше пяти, используем Navigation Drawer. Если меньше — Bottom Navigation Bar. Tabs нечасто применяют для этой навигации, но способ нам доступен. Однако Material рекомендует не совмещать Tabs и Bottom Navigation Bar, так как взаимодействие с данными компонентами влияет на контент страницы и пользователь может запутаться.
Это отличие предлагает [19] Material.
Если вы в iOS перейдёте от материнской страницы к дочерней, потом через Tab Bar переключитесь на другую материнскую страницу, то по возвращении на первую материнскую страницу вы всё также будете находиться на дочерней.

В Android всё строже — при переключении через Bottom Navigation Bar вы всегда переключаетесь между материнскими страницами. Если до этого вы были на дочерней, она сбросится.

Наши разработчики Android уверены, что такое поведение системы неверное. В случае переключения по Bottom Navigation стоит сохранять открытые дочерние страницы, как на iOS.
Tabs у Android, в отличие от Segmented Controls [20] iOS, имеют такое свойство: по табам можно перемещаться с помощью свайпа влево и вправо.
![]() |
![]() |
Это потому, что страницы табов находятся на одной высоте (elevation).

Это важно знать потому, что при использовании табов в Android нам не стоит [21] добавлять в дизайн элементы с похожими жестами. Например, карусель картинок или взаимодействие с карточками с помощью свайпов.
![]() |
![]() |
В целом эти два компонента не заменяют друг друга полностью. Segmented control — это control, который управляет контентом страницы. А Tabs — инструмент навигации.
Поэтому стоит советоваться с разработчиками перед тем, как при адаптации рассматривать их как равноценные компоненты. Иногда корректнее заменять андроидовские Tabs на Page Control. Всё зависит от контекста.
В iOS появление дочернего экрана (не считая модалок) происходит только одним образом: дочерняя страница появляется справа поверх материнской с эффектом slide in. Возвращение на материнский экран происходит с эффектом slide out.

Material рекомендует [22] показывать пользователю иерархическую взаимосвязь материнской и дочерней страницы с помощью осмысленной анимации.

Компонент, при взаимодействии с которым пользователь переходит к дочерней странице, раскрывается и покрывает собой материнскую страницу. Так пользователь понимает, откуда и куда он перешёл, почему это произошло и куда он вернётся при нажатии на кнопку «Назад».
Переход происходит с помощью Standard Easing [23].
![]() |
![]() |
При проектировании приложения с Navigation Drawer [24] важно помнить, что этот компонент «забирает» себе жест edge swipe [25] слева вправо. Поэтому не стоит добавлять этому жесту другую логику.

В iOS у этого жеста есть устоявшийся паттерн перехода с дочерней на материнскую страницу. Этот паттерн постепенно перекочевал и во многие андроидовские приложения.
По HIG контент в iOS при скролле ведёт себя [26] так: Navigation Bar уменьшается в ширине, исчезает Tool Bar. Но в целом iOS-разработчики могут настроить любое поведение контента и баров при скролле.

Material предлагает больше вариантов поведения при скролле. Например, Bottom Navigation Bar, Search и Bottom App Bar при скролле могут исчезать.
![]() |
![]() |
Top App Bar может либо исчезать, либо подниматься выше основного контента.


Интересно, что HIG относит поиск к барам и называет его Search Bar. В Material мы находим поиск в разделе Navigation, не в Components. То есть для Material поиск — это ещё один способ навигации.
Как в iOS, так и в Android поиск может статично присутствовать на экране и, как правило, прибит к Navigation Bar или Top App Bar.
![]() |
![]() |
На обеих платформах поиск может быть в виде иконки, только в iOS иконка раскрывается в самостоятельный компонент Search Bar, а в Android поиск раскрывается внутри Top App Bar.

![]() |
![]() |
Особенность поиска в iOS — его можно «спрятать» под Navigation Bar и вызывать по жесту Swipe down. Такой же жест типичен и для рефреша (pull to refresh), поэтому не стоит вызывать поиск и рефреш по этому одному действию.
В iOS нет многих нативных компонентов Android. Пробежимся по ним.
iOS в принципе не признаёт бургер-меню. Как говорили раньше, в iOS верхнеуровневая навигация только по Tab Bar.

Backdrop [27] — самый удивительный для меня компонент в Material. На момент написания статьи Android ещё только планирует реализовать его как нативный. В целом при изучении компонентов Material стоит проверять, доступны ли они уже для использования.

Сам Material любит этот компонент. Посмотрите, например, на победителей Material Design Award 2019. [28]
Banner [14] не найти среди нативных компонентов iOS. С помощью Banner мы сообщаем пользователю важную информацию и предлагаем связанные с ней действия.

Как и Banner, Snackbar [29] — не нативный для iOS. Snackbar применяют, чтобы донести до пользователя короткое сообщение о результате его действия.

Chips также отсутствует среди нативных компонентов iOS. Они используются для ввода информации, описания и действия.

Тут можно поспорить, что у iOS есть похожий компонент — Tool Bar [30]. Но они разные, вот почему: Toolbar — это бар для контекстных действий. Например, при редактировании списка сообщений в Messages появляется Tool Bar с действиями Read All и Delete.
Bottom App Bar — это перемещение Top App Bar вниз с теми же действиями верхнего уровня: открытие Navigation Drawer, вызов поиска и так далее. Ещё в Bottom App Bar мы размещаем FAB.
Да, FAB тоже нет в iOS. FAB — это кнопка для совершения основного действия на экране. Например, в почтовом приложении FAB будет создавать новое письмо.

Если вы используете в Android FAB для основного действия на экране, то в iOS это основное действие стоит разместить наверху в Navigation Bar справа (смотри пример: iMessages).

Разновидность [31] Navigation Drawer, типичная только для Android. Вызывается нажатием кнопки бургер-меню в Bottom App Bar.

Хоть Material и разрешает [32] использовать этот компонент в мобильном приложении, я бы рекомендовал заменить его на более привычный Bottom Sheet [33].

Этот очень красивый компонент Android не найти среди нативных для iOS. Expanding Bottom Sheet — это поверхность, которая прибита к низу страницы. При нажатии поверхность расширяется до полноценной страницы.

Standard Bottom Sheet [34]— разновидность Bottom Sheet, и его нет среди компонентов iOS.

Теперь рассмотрим, каких компонентов не найти в библиотеке Android.
Page Control [35]показывает, на какой из страниц находится пользователь. Его нет среди нативных компонентов Android.

Toolbar привычен только для iOS.

Steppers [36] — стандартный control iOS, не описан в Material. Используем его для ввода небольших значений. Пример: количество копий при печати.

Popover [37] — всплывающая панель, которая в основном используется на iPad.

В iOS есть одно стандартное применение Popover — настройка текста в ридерах или браузерах.

На обеих платформах Status Bar выполняет одинаковую задачу: сообщает о времени, уровне заряда, качестве мобильной связи и Wi-Fi. Они отличаются расположением этих индикаторов внутри Status Bar и в целом визуальным решением.
![]() |
![]() |
Ещё у Status Bar Android [38] есть такая особенность, когда приходит уведомление из приложения, в Status Bar появляется иконка этого приложения. В iOS [39] такого нет.

Рефрешеры вызываются одним и тем же жестом swipe down на обеих платформах. Но в iOS Refresh Content Control [40] «толкает» остальной контент вниз, в то время как Swipe to refresh [41] у Android появляется поверх контента. Кроме того, рефреш iOS при скроле контента исчезает, а у Android остаётся видимым.

Контролы платформ отличаются [25] только визуально. Можно отметить, что в iOS контролы проще: галочки используются как для radiobutton, так и для Checkbox. В Android они отличаются формой контрола.
![]() |
![]() |
Ещё Material предлагает [42] использовать родительский чекбокс, когда нужно дать пользователю возможность быстро выбрать все варианты.

В iOS стрелка не имеет линии посередине потому, что в iOS стрелка «Назад» подписывается предыдущим экраном. Если на предыдущем экране заголовок был стандартным, то заголовок переходит из заголовка влево к стрелке. Если заголовок был широким, то заголовок поднимается вверх. Если название предыдущей страницы слишком длинное, оно заменяется на слово back.
![]() |
![]() |
Кажется, у этого отличия нет строгого обоснования. Отдаём дань уважения платформе и используем рекомендуемое положение трёх точек. В iOS точки лежат горизонтально, в Android — вертикально.
![]() |
![]() |
В iOS выбор даты [43] происходит с помощью барабана. Барабан iOS можно использовать для ввода любых других данных. В Android Picker [44] даты имитирует вид физического календаря.

Material также рекомендует давать пользователям возможность вводить дату с помощью Input Field-а.

HIG куда менее требователен к Text Fields, по сравнению с Material.
В iOS Label находится [45] внутри поля ввода и исчезает во время ввода текста. Material рекомендует [46] поднимать Label при вводе текста.
Обе платформы советуют при необходимости добавлять Clear Button.
Material также рекомендует выделять Label и полосу под Text Field основным цветом — это помогает понять, что поле выделено. Material описывает поведение поля при ошибке ввода. В Material на выбор есть две формы: Filled и Outlined.

Context Menus [47] появился в iOS 13. Этот контрол предлагает пользователю нескольких контекстных действий, связанных с выбранным элементом. В Android есть частично похожий на него элемент — Menus [48].

Menus Android применяется в большем числе кейсов: оно предлагает контекстные действия как для выбранного элемента, так и для всей страницы в целом; используется как инпут с несколькими вариантами на выбор (дропдаун меню); применяется для редактирования текста. Context Menus — компонент только iOS. А Menus Android можно использовать как в мобильном приложении, так и на десктопе.
Если в iOS приложении iOS вы используете Action View [49] или Activity View [50], в Android их может отчасти заменить компонент Android Modal Bottom Sheet [33]. Он также возникает в нижней части экрана, затемняет контент и закрывается похожими способами (кнопка, нажатие вне модального окна, иногда смахивание вниз). Задача компонентов — предложить выбор или контекстные действия.
![]() |
![]() |
![]() |
![]() |
Помимо визуального отличия Edit Menus [51] и Text Selection Tool Bar [52]отличаются следующим: при долгом нажатии в Android пользователь может продолжить выделение текста. В iOS после долго нажатия возникает лупа для точного выбора места в слове.

Также Android отличается от iOS тем, что при вызове дополнительных действий Text Selection Tool Bar принимает форму Menus.

В iOS это 0,5 pt, в Android — 1 dp.
По гайдлайнам минимальная зона нажатия в iOS — 44 x 44 pt, а в Android — 48 x 48 dp.
Ваше приложение для iOS будут скачивать из App Store. Приложение для Android — из Google Play. Чтобы разместить приложение в сторах правильно, нужно соблюдать их требования. Требования App Store стоит прочесть здесь [53], а Google Play — здесь [54]. Там много особенностей, поэтому рекомендую изучить перед публикацией.
Это особый паттерн [55] iOS: если потрясти смартфон, приложение предложит пользователю отменить или повторить последнее совершенное действие. Как правило, этот жест используется для удаления введённого текста.

Material разрешает [56] на Launch Screen размещать логотип приложения. HIG не рекомендует [57] использовать Launch Screen для маркетинговых целей, и предлагает при запуске приложения выводить только Placeholder.
![]() |
![]() |

На сайте Material раскрыты ещё и такие темы, как: Data Formats [58](разные форматы данных), Data Visualization [59] (правильная инфографика), Empty States [60] (дизайн пустых состояний), Offline States [61] (интерфейс при отсутствии интернета), Accessibility [62] (доступный дизайн) и Bidirectionality [63] (дизайн для читающих справа налево).
Знание гайдлайнов повышает наш уровень осознанности. Мы понимаем сложившиеся пользовательские паттерны и создаём приложение, которое органично вписывается в привычки пользователей.
Гайдлайны побуждают нас уважать нативные решения платформ. При адаптации дизайна под другую платформу всегда есть соблазн продублировать дизайн без изменений. Это вредит пользовательскому опыту и усложняет разработку. Но когда мы видим различия в нативных решениях, мы адаптируем дизайн правильно.
А если мы хотим внедрить новое, кастомное решение, знание гайдлайнов помогает аргументировать это нововведение.
Итого: знание гайдлайнов и их отличий — важный навык дизайнера мобильных приложений.
Какие ещё отличия вы знаете? Поделитесь ими в комментариях.
Автор: redmadrobot
Источник [64]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ux/351652
Ссылки в тексте:
[1] Human Interface Guidelines: https://developer.apple.com/design/human-interface-guidelines/
[2] Material Design: https://material.io/
[3] скевоморфизма: https://ru.wikipedia.org/wiki/%D0%A1%D0%BA%D0%B5%D0%B2%D0%BE%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC
[4] pt: https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/
[5] dp: https://material.io/design/layout/pixel-density.html
[6] общепринятый: https://material.io/design/layout/responsive-layout-grid.html
[7] Safe are: https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/adaptivity-and-layout/
[8] San Francisco: https://developer.apple.com/fonts/
[9] Roboto: https://fonts.google.com/specimen/Roboto
[10] Android Navigation Bar: https://material.io/design/platform-guidance/android-bars.html%20%20%20%20%20%20%20%20#android-navigation-bar
[11] reverse chronological navigation: https://material.io/design/navigation/understanding-navigation.html%20%20%20%20%20%20%20%20#reverse-navigation
[12] тени играют: https://material.io/design/environment/elevation.html
[13] Alerts: https://developer.apple.com/design/human-interface-guidelines/ios/views/alerts/
[14] их три: https://material.io/components/banners/
[15] Tab bar: https://developer.apple.com/design/human-interface-guidelines/ios/bars/tab-bars/
[16] Navigation Drawer: https://material.io/components/navigation-drawer/
[17] Bottom Navigation Bar : https://material.io/components/bottom-navigation/
[18] Tabs: https://material.io/components/tabs/
[19] предлагает: https://material.io/components/bottom-navigation/#behavior
[20] Segmented Controls: https://developer.apple.com/design/human-interface-guidelines/ios/controls/segmented-controls/
[21] не стоит: https://material.io/components/tabs/#behavior
[22] рекомендует: https://material.io/design/navigation/navigation-transitions.html%20%20%20%20%20%20%20%20#hierarchical-transitions
[23] Standard Easing: https://material.io/design/motion/speed.html%20%20%20%20%20%20%20%20#easing
[24] Navigation Drawer: https://material.io/components/navigation-drawer/#
[25] edge swipe: https://material.io/design/platform-guidance/cross-platform-adaptation.html%20%20%20%20%20%20%20%20#cross-platform-guidelines
[26] ведёт себя: https://developer.apple.com/design/human-interface-guidelines/ios/views/scroll-views/
[27] Backdrop: https://material.io/components/backdrop/
[28] Material Design Award 2019.: https://design.google/library/material-design-awards-2019/
[29] Snackbar: https://material.io/components/snackbars/
[30] Tool Bar: https://developer.apple.com/design/human-interface-guidelines/ios/bars/toolbars/
[31] Разновидность: https://material.io/components/app-bars-bottom/#behavior
[32] разрешает: https://material.io/components/sheets-side/#
[33] Bottom Sheet: https://material.io/components/sheets-bottom/
[34] Standard Bottom Sheet : https://material.io/components/sheets-bottom/#standard-bottom-sheet
[35] Page Control : https://developer.apple.com/design/human-interface-guidelines/ios/controls/page-controls/
[36] Steppers: https://developer.apple.com/design/human-interface-guidelines/ios/controls/steppers/
[37] Popover: https://developer.apple.com/design/human-interface-guidelines/ios/views/popovers/
[38] Status Bar Android: https://material.io/design/platform-guidance/android-bars.html%20%20%20%20%20%20%20%20#status-bar
[39] iOS: https://developer.apple.com/design/human-interface-guidelines/ios/bars/status-bars/
[40] Refresh Content Control: https://developer.apple.com/design/human-interface-guidelines/ios/controls/refresh-content-controls/
[41] Swipe to refresh: https://material.io/design/platform-guidance/android-swipe-to-refresh.html
[42] предлагает: https://material.io/components/selection-controls/#usage
[43] выбор даты: https://developer.apple.com/design/human-interface-guidelines/ios/controls/pickers/
[44] Picker: https://material.io/components/pickers/
[45] находится: https://developer.apple.com/design/human-interface-guidelines/ios/controls/text-fields/
[46] рекомендует: https://material.io/components/text-fields/
[47] Context Menus: https://developer.apple.com/design/human-interface-guidelines/ios/controls/context-menus/
[48] Menus: https://material.io/components/menus/
[49] Action View: https://developer.apple.com/design/human-interface-guidelines/ios/views/action-sheets/
[50] Activity View: https://developer.apple.com/design/human-interface-guidelines/ios/views/activity-views/
[51] Edit Menus: https://developer.apple.com/design/human-interface-guidelines/ios/controls/edit-menus/
[52] Text Selection Tool Bar : https://material.io/design/platform-guidance/android-text-selection-toolbar.html
[53] здесь: https://developer.apple.com/app-store/product-page/
[54] здесь: https://support.google.com/googleplay/android-developer/answer/1078870?hl=ru
[55] особый паттерн: https://developer.apple.com/design/human-interface-guidelines/ios/user-interaction/undo-and-redo/
[56] разрешает: https://material.io/design/communication/launch-screen.html%20%20%20%20%20%20%20%20
[57] не рекомендует: https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/launch-screen/
[58] Data Formats : https://material.io/design/communication/data-formats.html
[59] Data Visualization: https://material.io/design/communication/data-visualization.html
[60] Empty States: https://material.io/design/communication/empty-states.html
[61] Offline States: https://material.io/design/communication/offline-states.html
[62] Accessibility: https://material.io/design/usability/accessibility.html
[63] Bidirectionality: https://material.io/design/usability/bidirectionality.html
[64] Источник: https://habr.com/ru/post/491674/?utm_source=habrahabr&utm_medium=rss&utm_campaign=491674
Нажмите здесь для печати.