Communitygithub.com

Dev-KAIDO/diseño-movil

Habilidad de diseño de aplicaciones móviles para iOS y Android: patrones de UI nativos, guías de plataforma, gestos, navegación, tipografía, accesibilidad, diseño con Expo/React Native, layouts responsivos móviles y UX móvil moderno. Úsala al construir o revisar cualquier interfaz de aplicación móvil.

¿Qué es diseño-movil?

Esta habilidad proporciona una guía completa de diseño móvil que cubre iOS (Human Interface Guidelines) y Android (Material Design 3), así como enfoques multiplataforma con React Native y Expo. Incluye patrones de navegación, escalas tipográficas, componentes nativos, principios de layout, sistemas de color, animación, rendimiento y accesibilidad. Está diseñada para desarrolladores y diseñadores que trabajan con Expo, React Native, SwiftUI, Jetpack Compose y NativeWind, unificando múltiples habilidades especializadas en un recurso centralizado. Es ideal para prototipado rápido con Expo Go, implementación de componentes de UI nativos (@expo/ui) y diseño responsivo con NativeWind v5 + Tailwind v4. La habilidad también incluye listas de verificación para garantizar la calidad y consistencia en todas las plataformas.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Dev-KAIDO/agent-skills/tree/HEAD/skills/design-mobile

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Diseño Móvil — Habilidad Completa

Descripción general

Cubre el diseño de iOS y Android: patrones específicos de plataforma, navegación, gestos, tipografía, accesibilidad y tendencias modernas. Fusiona building-native-ui, expo-ui-swiftui, expo-ui-jetpack-compose, engineering-mobile-app-builder, react-native-best-practices, expo-tailwind-setup y native-data-fetching.


1. Directrices de Plataforma (إرشادات المنصة)

1.1 iOS (Human Interface Guidelines)

  • Navegación: push/pop (UINavigationController), barra de pestañas, hojas modales
  • Tipografía: SF Pro (San Francisco) — New York (serifa) para lectura
  • Cuadrícula: cuadrícula de 4pt, márgenes: 16pt (estándar), 20pt (grande)
  • Colores: colores del sistema (azul, verde, rojo, naranja, morado, rosa, verde azulado, índigo, gris)
  • Objetos táctiles: mínimo 44×44pt
  • Gesto de retroceso: deslizar desde el borde izquierdo
  • Áreas seguras: notch, indicador de inicio (usa safe-area-inset)
  • Modo oscuro: UIColor { traitCollection } adaptación del sistema

1.2 Android (Material Design 3)

  • Navegación: navegación inferior, cajón de navegación, barra superior de la aplicación, botón de retroceso
  • Tipografía: Roboto (sistema), Google Sans (marca)
  • Cuadrícula: cuadrícula de 4dp, márgenes: 16dp
  • Colores: color dinámico (Material You), paletas tonales
  • Objetos táctiles: mínimo 48×48dp
  • Botón de retroceso: retroceso del sistema (retroceso predictivo en Android 14)
  • Elevación: sombras que representan profundidad y prioridad de interacción
  • Efecto de ondulación: retroalimentación táctil en todos los elementos interactivos

1.3 Multiplataforma (React Native / Expo)

  • Prueba Expo Go primero para prototipado rápido
  • Usa useWindowDimensions() en lugar de Dimensions.get()
  • boxShadow para sombras multiplataforma (no shadow/elevation heredados)
  • expo-image para mejor carga de imágenes y SF Symbols
  • Código específico de plataforma: .ios.tsx / .android.tsx

2. Navegación Móvil (التنقل)

2.1 Patrones de Navegación

PatrónCuándo UsarPlataforma
Barra de Pestañas3-5 destinos principalesiOS (abajo), Android (abajo)
Navegación Inferior3-5 destinos principalesMaterial Design
Cajón de NavegaciónMuchos destinos, acceso poco frecuenteAndroid
Navegación por PilasExploración jerárquicaAmbas
Hojas ModalesTareas enfocadas, acciones rápidasiOS (hoja de formulario), Android (hoja inferior)
Modal a Pantalla CompletaFlujos de varios pasosAmbas
Acciones de DeslizamientoAcciones de elementos de lista (eliminar, archivar)Ambas

2.2 Reglas de la Barra de Pestañas

  • Máximo 5 pestañas (iOS), 5 máximo (Material)
  • Estado activo: icono relleno + cambio de color de etiqueta
  • Insignia: punto rojo con contador para notificaciones
  • Área segura: por encima del indicador de inicio en iOS

2.3 Navegación por Pilas

  • Empujar: deslizar desde la derecha (iOS), desvanecer+deslizar (Android)
  • Sacar: deslizar desde el borde izquierdo (iOS), botón de retroceso (Android)
  • Transición: 300ms (iOS), 200-300ms (Android)

2.4 Gestos

  • Deslizar: acciones de lista, navegación entre pantallas
  • Tirar para actualizar: patrón estándar para listas
  • Pulsación larga: menú contextual (retardo de 300-500ms)
  • Pellizcar para ampliar: imágenes, mapas
  • Doble toque: ampliar, gustar (redes sociales)

3. Tipografía Móvil (الطباعة)

3.1 Escala Tipográfica

EstiloTamañoPesoAltura de Línea
Título Grande34pt70041pt
Título 128pt70034pt
Título 222pt70028pt
Título 320pt60025pt
Titular17pt60022pt
Cuerpo17pt40022pt
Llamada16pt40021pt
Subtítulo15pt40020pt
Nota al pie13pt40018pt
Leyenda 112pt40016pt
Leyenda 211pt40013pt

3.2 Reglas

  • Tamaño de texto mínimo: 12sp (Android), 11pt (iOS)
  • Texto del cuerpo: 16-17pt para lectura cómoda
  • Altura de línea: 1.3-1.5× tamaño de fuente
  • Nunca trunques: texto crítico (números, nombres, fechas)
  • Longitud de línea: máximo 40-70 caracteres
  • Tipo dinámico: soporta el tamaño de texto del sistema (iOS: UIFontMetrics, Android: sp)

4. Componentes Móviles (المكونات)

4.1 Componentes Comunes

ComponenteiOSAndroid (Material)
BotónUIButton (relleno, teñido, gris)Elevado, relleno, tonal, contorneado, texto
ListaUITableView (agrupada, insertada)RecyclerView (lista, tarjeta)
EntradaUITextFieldTextField (relleno, contorneado)
AlternarUISwitchSwitch
DeslizadorUISliderSlider
SelectorSelector de rueda / menú desplegableMenú desplegable
Barra de pestañasUITabBarBottomNavigationView
BúsquedaUISearchBarSearchBar
ToastN/A (usa personalizado)Snackbar

4.2 Patrones de Lista

  • Estándar: icono + título + subtítulo + cheurón
  • Acción: deslizar a la izquierda → eliminar/archivar/compartir
  • Agrupada: encabezados de sección con elementos agrupados
  • Tarjeta: imagen + título + descripción + acciones
  • Desplazamiento infinito: cargar más al desplazarse (con indicador de carga)

4.3 Patrones de Formulario

  • Una sola columna siempre (móvil)
  • Etiquetas: encima de las entradas (no solo flotantes)
  • Tipo de teclado: coincidir con la entrada (numérico, correo electrónico, teléfono)
  • Evitación del teclado: desplazar el formulario cuando aparece el teclado
  • Validación: en línea debajo del campo, cambio de color
  • Envío: botón inferior fijo o acción de formulario

5. Diseño Móvil (التنسيق)

5.1 Áreas Seguras

// Expo / React Native
import { useSafeAreaInsets } from 'react-native-safe-area-context';

const insets = useSafeAreaInsets();
<View style={{ paddingTop: insets.top, paddingBottom: insets.bottom }} />

5.2 Densidad de Pantalla

  • iPhone SE: 375×667pt (la más pequeña)
  • iPhone 14: 390×844pt
  • iPhone 14 Pro Max: 430×932pt
  • Android: 360×640dp (común), varía ampliamente

5.3 Objetos Táctiles

  • Mínimo: 44×44pt (iOS), 48×48dp (Android)
  • Preferido: 48×48pt para zonas amigables al pulgar
  • Espaciado: mínimo 8pt entre objetos táctiles adyacentes

5.4 Zonas del Pulgar

  • Mejor zona: mitad inferior de la pantalla (alcance natural del pulgar)
  • Acciones principales: tercio inferior (especialmente en teléfonos grandes)
  • Acciones destructivas: lejos de la zona principal

6. Sistema de Diseño Móvil (نظام التصميم)

6.1 Sistema de Color

/* Modo claro */
--primary: #007AFF;        /* iOS blue / Android blue */
--background: #FFFFFF;
--surface: #F2F2F7;
--text-primary: #000000;
--text-secondary: #8E8E93;
--separator: #C6C6C8;
--success: #34C759;
--error: #FF3B30;
--warning: #FF9500;

/* Modo oscuro */
--primary: #0A84FF;
--background: #000000;
--surface: #1C1C1E;
--text-primary: #FFFFFF;
--text-secondary: #8E8E93;

6.2 Modo Oscuro

  • Alternancia en todo el sistema (sigue la configuración del SO)
  • Negro puro (#000) para OLED (iOS) o gris oscuro (#121212) para Android
  • Reduce ligeramente el contraste en modo oscuro
  • Prueba ambos modos para cada pantalla

6.3 Iconografía

  • iOS: SF Symbols (sistema), iconos personalizados (específicos de la aplicación)
  • Android: Material Icons (sistema), personalizados
  • Tamaño: 24×24dp estándar, 18×18dp pequeño, 28×28dp grande
  • Estilo: relleno (activo), contorneado (inactivo)

7. Movimiento y Animación (الحركة)

7.1 Principios

  • Duración: 250-350ms (estándar), 150-200ms (rápido), 500ms+ (complejo)
  • Aceleración: cubic-bezier(0.2, 0, 0, 1) (Material), ease-out (iOS)
  • Propósito: indicar navegación, confirmar acción, mostrar carga, deleitar

7.2 Patrones Comunes

AnimaciónDuraciónUso
Empujar/sacar página300msNavegación por pilas
Presentar/descartar modal300msHojas modales
Desvanecer entrada200msCarga de contenido
Deslizar hacia arriba250msHoja inferior
Escalar hacia arriba200msRetroalimentación de pulsación de botón
EsqueletoBucle de 1.5sCarga de contenido
Tirar para actualizar200msActualización de lista

7.3 Específicos de Plataforma

  • iOS: física de resorte (natural, elástico)
  • Android: aceleración estándar (predecible, suave)
  • Hápticos: impacto ligero (pulsación de botón), medio (selección), patrones de éxito/error

8. Patrones de UX Móvil (أنماط تجربة المستخدم)

8.1 Incorporación

  • Máximo 3-5 pantallas: propuesta de valor → funciones → permisos → CTA
  • Opción de salto: siempre disponible
  • Indicador de progreso: puntos o barra de progreso
  • Solicitudes de permiso: explica POR QUÉ antes de solicitar

8.2 Estados Vacíos

  • Ilustración o icono
  • Mensaje claro
  • Botón de llamada a la acción
  • Ejemplos: "Sin resultados", "Tu carrito está vacío", "Sin notificaciones"

8.3 Estados de Carga

  • Pantallas de esqueleto (preferidas sobre los spinners)
  • Barras de progreso para operaciones medibles
  • Tirar para actualizar para listas
  • IU optimista para acciones (actualizar inmediatamente, revertir en caso de error)

8.4 Estados de Error

  • En línea: errores de validación a nivel de campo
  • Pantalla completa: errores críticos con botón de reintento
  • Toast/snackbar: errores transitorios (3-5 segundos)
  • Sin conexión: contenido almacenado en caché + banner "Estás desconectado"

8.5 Notificaciones

  • Push: solicitud de permiso con explicación
  • En la aplicación: insignia, banner o bandeja de entrada
  • Configuración: control granular (por categoría)

9. Accesibilidad (إمكانية الوصول)

9.1 Lista de Verificación

  • Todos los objetos táctiles ≥ 44×44pt
  • El texto admite Tipo Dinámico / escalado de fuente
  • Contraste de color ≥ 4.5:1
  • Todas las imágenes tienen texto alternativo (accessibilityLabel)
  • Lector de pantalla: VoiceOver (iOS) / TalkBack (Android)
  • El orden de enfoque sigue el orden visual
  • Retroalimentación háptica para acciones importantes
  • Movimiento reducido respetado
  • Sin información solo de color
  • Los formularios tienen etiquetas adecuadas

9.2 Lector de Pantalla

  • VoiceOver de iOS: accessibilityLabel, accessibilityHint, accessibilityTraits
  • TalkBack de Android: contentDescription, accessibilityRole
  • Prueba: activa el lector de pantalla y navega por toda la aplicación

10. Rendimiento (الأداء)

10.1 Métricas Clave

  • TTI (Tiempo para ser Interactivo): < 2s
  • Fotogramas por segundo: 60 FPS (16.67ms por fotograma)
  • Tamaño de la aplicación: minimizar el paquete
  • Memoria: sin fugas, limpieza adecuada

10.2 Optimización

  • Usa FlatList (no ScrollView) para listas largas
  • Memoriza componentes costosos (React.memo, useMemo, useCallback)
  • Carga diferida de pantallas e imágenes
  • Reduce los re-renderizados (props de clave adecuadas, evita funciones anónimas en props)
  • Almacenamiento en caché y compresión de imágenes
  • Motor Hermes para React Native

11. Componentes de UI Nativos de Expo (مكونات أصلية)

11.1 Expo UI — SwiftUI (iOS)

npx expo install @expo/ui
import { Host, SwiftUIButton } from '@expo/ui/swift-ui';

export default function Screen() {
  return (
    <Host>                                 {/* cada árbol SwiftUI necesita Host */}
      <SwiftUIButton title="Toca aquí" action={onPress} />
    </Host>
  );
}
  • ⚠️ Cada árbol SwiftUI debe estar envuelto en Host — de lo contrario no se renderiza nada
  • Inserta componentes de React Native dentro de un árbol SwiftUI con RNHostView
  • Lee el .d.ts del paquete y la documentación de componentes antes de usarlos — los modificadores cambian entre versiones del SDK

11.2 Expo UI — Jetpack Compose (Android)

import { Host, Button } from '@expo/ui/jetpack-compose';
import { composeModifiers } from '@expo/ui/jetpack-compose/modifiers';

<Host>
  <Button title="Toca aquí" modifiers={[composeModifiers.padding(16)]} onPress={onPress} />
</Host>
  • ⚠️ Envuelve cada árbol de Compose en Host (misma regla que SwiftUI)
  • Listas largas → LazyColumn; iconos → Icon con archivos XML locales
  • Lee el .d.ts del componente antes de usar modificadores — la API es específica de la versión del SDK

11.3 NativeWind v5 + Tailwind v4 (estilo multiplataforma)

npm i nativewind react-native-css tailwindcss @tailwindcss/postcss
// src/tw/index.tsx — componentes envueltos con soporte className
import { styled } from 'nativewind';
export const View = styled(NativeView);
  • No se necesitan cambios en babel.config.js — react-native-css maneja la transformación en tiempo de ejecución
  • La salida reside en src/tw/ (wrap View, Text, Image, animated)
  • Usa className en todas partes; recurre a style para casos puntuales
  • Destino web: el mismo className funciona en React Native Web — un código base, tres plataformas

11.4 Cuándo Usar Cada Uno

NecesidadUsa
Aspecto nativo (SwiftUI/Compose)@expo/ui con Host
Multiplataforma + iteración rápidaNativeWind v5
Dibujo/animación personalizadaReanimated + Skia
Componentes RN estándarView/Text/Pressable incorporados

12. Lista de Verificación (قائمة التحقق)

  • Probado en un dispositivo real (no solo en el simulador)
  • Tanto modo claro como oscuro
  • Tamaño de texto dinámico (más pequeño y más grande)
  • Navegación con VoiceOver/TalkBack
  • Todos los objetos táctiles accesibles
  • Sin roturas de diseño en la pantalla más pequeña (iPhone SE)
  • Sin roturas de diseño en la pantalla más grande (tableta)
  • Animaciones suaves a 60 FPS
  • Estado sin conexión manejado
  • Solicitudes de permiso con explicaciones
  • Estados vacíos para todas las listas
  • Estados de error para todas las operaciones asíncronas
  • Estados de carga (esqueleto, spinner)
  • Evitación del teclado en formularios

Habilidades Relacionadas

  • $design-web — para diseño de interfaces web
  • $design-desktop — para diseño de aplicaciones de escritorio
  • $design-figma — para trabajo de diseño en Figma
  • $mobile-development — para desarrollo con Expo/React Native
  • $testing-comprehensive — para pruebas de aplicaciones móviles y de escritorio

Skills relacionados