Responsive Design es un enfoque para construir interfaces donde el diseño se adapta automáticamente al tamaño, orientación y tipo de dispositivo. En el desarrollo móvil, el responsive design se implementa mediante size classes en iOS y configuration qualifiers en Android. Este artículo cubre los principios del diseño adaptable, las herramientas de ambas plataformas y ejemplos de código.
Puntos clave
Responsive Design es un método para construir interfaces donde el diseño reacciona al tamaño de la pantalla, orientación y espacio disponible, reorganizando los elementos sin perder funcionalidad. El término fue acuñado por Ethan Marcotte en 2010 para el diseño web, pero los principios son totalmente aplicables a aplicaciones nativas móviles.
En el desarrollo móvil, responsive design significa que una misma aplicación se muestra correctamente en todos los dispositivos: desde iPhone SE (375 pt) hasta iPad Pro (1024 pt en retrato) y desde smartphones Android (360 dp) hasta tablets (800 dp). Los elementos clave son cuadrícula flexible, imágenes adaptables y media queries a nivel del framework (size classes, qualifiers).
Según la documentación de Apple Developer, una aplicación debe ser universal — funcionando en todos los dispositivos sin una compilación separada para iPad. Google Play recomienda usar diseños adaptables mediante Jetpack WindowManager y canonical layouts. La falta de adaptación para tablets es una causa común de reseñas negativas.
Los términos responsive y adaptive a menudo se confunden, aunque describen enfoques diferentes. Responsive design utiliza una cuadrícula flexible que se ajusta continuamente al ancho de la pantalla. Adaptive design utiliza diseños fijos para breakpoints predefinidos — la aplicación cambia entre ellos de forma abrupta.
| Característica | Responsive Design | Adaptive Design |
|---|---|---|
| Enfoque | Flujo continuo | Cambios discretos |
| Cuadrícula | Porcentual, fluida | Fija por breakpoint |
| Implementación | Auto Layout, Flexbox, ConstraintLayout | Size Classes, layout-w600dp, storyboards separados |
| Número de diseños | Uno, pero flexible | Múltiples (retrato, paisaje, tablet) |
En la práctica, las aplicaciones móviles usan una combinación de ambos enfoques. La cuadrícula base se construye responsive (Auto Layout con dependencias de constraint), y al alcanzar un breakpoint (ej.: ancho > 600 pt), el diseño cambia a una versión adaptable con otra disposición de elementos. iOS combina Auto Layout (responsive) con Size Classes (adaptive). Android combina ConstraintLayout (responsive) con recursos qualifier (adaptive).
Size Classes es un mecanismo de iOS que clasifica el espacio disponible de la pantalla en dos ejes: horizontal y vertical. Cada eje puede ser Compact (C) o Regular (R). La combinación da cuatro opciones de adaptación: CR (iPhone retrato típico), RR (iPad retrato/paisaje), RC (iPhone paisaje en Plus/Pro Max), CC (iPad Split View).
// Definición de Size Classes en Swift
import UIKit
class AdaptiveViewController: UIViewController {
override func traitCollectionDidChange(
_ previousTraitCollection: UITraitCollection?
) {
super.traitCollectionDidChange(previousTraitCollection)
adjustLayout(for: traitCollection)
}
private func adjustLayout(for traits: UITraitCollection) {
switch (traits.horizontalSizeClass, traits.verticalSizeClass) {
case (.regular, .regular):
showSplitView() // iPad — mostrar master-detail
case (.compact, .regular):
showStackedView() // iPhone retrato — layout de pila
case (.compact, .compact):
showCompactView() // iPhone SE paisaje — minimizado
default:
showDefaultView()
}
}
private func showSplitView() {
// Usando UISplitViewController o HStack
}
private func showStackedView() {
// Pila vertical para iPhone
}
private func showCompactView() {
// Ocultar elementos secundarios, mostrar los principales
}
}En Interface Builder, las Size Classes se configuran a través del panel “wAny hAny” — el desarrollador selecciona una combinación específica (wRegular hRegular, wCompact hRegular) y añade variaciones de constraint. SwiftUI usa @Environment(\.horizontalSizeClass) y @Environment(\.verticalSizeClass) para adaptación reactiva — al cambiar la orientación o el tamaño de la ventana, SwiftUI redibuja la vista automáticamente.
// Size Classes en SwiftUI
import SwiftUI
struct ResponsiveView: View {
@Environment(\.horizontalSizeClass) private var hSizeClass
var body: some View {
if hSizeClass == .regular {
// iPad — layout horizontal con panel lateral
HStack {
SidebarView()
.frame(width: 300)
ContentView()
}
} else {
// iPhone — pila vertical a pantalla completa
VStack {
ContentView()
}
}
}
}Configuration Qualifiers es un mecanismo de Android para cargar diferentes recursos (layout, values, drawables) según las características del dispositivo. Los qualifiers incluyen tamaño de pantalla (small, normal, large, xlarge), orientación (port, land), ancho mínimo (sw
// Determinación de la configuración del dispositivo en Kotlin
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val config = resources.configuration
val screenWidthDp = config.screenWidthDp
val screenHeightDp = config.screenHeightDp
val orientation = config.orientation
when {
screenWidthDp >= 900 -> setContentView(R.layout.activity_main_tablet)
screenWidthDp >= 600 -> setContentView(R.layout.activity_main_sw600)
else -> setContentView(R.layout.activity_main_phone)
}
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, LandscapeFragment())
.commit()
}
}
}Estructura de recursos para diferentes pantallas: res/layout/activity_main.xml (teléfono), res/layout-sw600dp/activity_main.xml (tablet 7”), res/layout-sw720dp/activity_main.xml (tablet 10”). Android selecciona automáticamente el layout correcto basado en smallestWidth — el ancho mínimo de pantalla en dp independientemente de la orientación. El qualifier sw
// Jetpack Compose — WindowSizeClass para adaptación
@Composable
fun ResponsiveScreen() {
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
when {
windowSizeClass.windowSizeClass == WindowWidthSizeClass.EXPANDED -> {
TabletLayout() // >= 840 dp
}
windowSizeClass.windowSizeClass == WindowWidthSizeClass.MEDIUM -> {
MediumLayout() // 600–840 dp
}
else -> {
CompactLayout() // < 600 dp
}
}
}Jetpack WindowManager (biblioteca androidx.window) proporciona WindowSizeClass con tres categorías de ancho: COMPACT (0–600 dp), MEDIUM (600–840 dp), EXPANDED (>840 dp). Esta es una alternativa moderna a las carpetas qualifier antiguas. Google la recomienda para adaptarse a dispositivos plegables y tablets.
La cuadrícula adaptable es la base del responsive design. En lugar de tamaños fijos, los elementos usan proporciones porcentuales, constraints flexibles y tamaño de contenido intrínseco. Breakpoints son puntos de ancho de pantalla en los que el diseño cambia entre estados.
| Breakpoint | Size Class iOS | Qualifier Android | Tipo de dispositivo |
|---|---|---|---|
| 0–374 pt / dp | Compact width | — | iPhone SE, Android antiguos |
| 375–599 pt / dp | Compact width | sw320dp | iPhone 14, Galaxy S24 |
| 600–839 pt / dp | Regular width | sw600dp | iPad mini, tablets 7” |
| 840+ pt / dp | Regular width | sw720dp | iPad Pro, tablets 10” |
Breakpoints recomendados por Google Material Design y Apple HIG: 0–599 dp (teléfono, una columna), 600–839 dp (tablet, dos columnas, navigation rail), 840+ dp (tablet, tres columnas, navigation drawer). El número de breakpoints no debe superar 4 — demasiados puntos de transición complican el mantenimiento y las pruebas.
Un responsive design exitoso requiere seguir un conjunto de reglas desarrolladas por la comunidad de desarrolladores de iOS y Android durante la última década. A continuación, las recomendaciones clave basadas en Apple HIG, Google Material Design y la experiencia en proyectos de producción.
El principio principal del diseño adaptable: el contenido determina el diseño, no al revés. Si el iPad muestra la misma pila de tarjetas que el iPhone, solo que estirada a lo ancho — eso no es responsive design. Responsive design replantea la composición: en iPhone — desplazamiento vertical, en iPad — master-detail con panel lateral.
Preguntas frecuentes
Responsive Design usa una cuadrícula flexible que se ajusta suavemente al ancho de la pantalla. Adaptive Layout cambia entre diseños fijos en los puntos de breakpoint. En la práctica, ambos enfoques se combinan: cuadrícula base responsive + cambios adaptativos para cambios importantes (teléfono vs tablet).
iOS usa dos ejes: horizontal (Compact/Regular) y vertical (Compact/Regular). iPhone en retrato — Compact width, Regular height (CR). iPad — Regular width, Regular height (RR). iPhone Plus/Pro Max en paisaje — Regular width, Compact height (RC). El desarrollador define variaciones de constraint para cada combinación.
sw600dp (smallestWidth 600 dp) es un qualifier de recursos de Android que indica que el ancho mínimo de pantalla del dispositivo es de al menos 600 dp. Se usa para cargar layouts alternativos para tablets (7” y más). La orientación no importa — sw considera el lado más pequeño de la pantalla.
En iOS, use el simulador con diferentes Size Classes y Preview en SwiftUI con dispositivos de varios tamaños. En Android, use perfiles de dispositivo en el emulador (Pixel 5, Pixel C, Galaxy Tab) y Layout Validation en Android Studio. En ambas plataformas, asegúrese de probar en un iPad/tablet Android físico y en un dispositivo plegable.
Canonical layouts son patrones de composición adaptable listos de Google Material Design 3: list-detail (lista + detalle), feed (fuente de tarjetas), supporting pane (contenido principal + panel de acciones). Cada patrón tiene tres variantes (compact/medium/expanded) y se adapta automáticamente a WindowSizeClass.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también