-
Crea una app de UIKit con el nuevo diseño
Actualiza tu app de UIKit para aprovechar al máximo el nuevo sistema de diseño. Analizaremos los cambios clave en las vistas de pestañas y divididas, barras, presentaciones, búsqueda y controles, y cómo usar Liquid Glass en tu IU personalizada. Para aprovechar al máximo este video, recomendamos ver primero “Conoce el nuevo sistema de diseño” para obtener orientación general sobre diseño.
Capítulos
- 0:00 - Introducción
- 1:55 - Vistas de pestañas y vistas divididas
- 7:19 - Navegación y barras de herramientas
- 13:31 - Presentaciones
- 15:18 - Buscar
- 17:24 - Controles
- 19:15 - Elementos personalizados
- 25:01 - Próximos pasos
Recursos
Videos relacionados
WWDC25
- Conoce el nuevo sistema de diseño
- Conoce Liquid Glass
- Haz que tu app UIKit sea más flexible
- Novedades de UIKit
WWDC24
-
Buscar este video…
-
-
2:31 - Minimize tab bar on scroll
// Minimize tab bar on scroll tabBarController.tabBarMinimizeBehavior = .onScrollDown -
3:08 - Add a bottom accessory
// Add a bottom accessory let nowPlayingView = NowPlayingView() let accessory = UITabAccessory(contentView: nowPlayingView) tabBarController.bottomAccessory = accessory -
3:35 - Update the accessory with the tabAccessoryEnvironment trait
// Update the accessory with the trait registerForTraitChanges([UITraitTabAccessoryEnvironment.self]) { (view: MiniPlayerView, _) in let isInline = view.traitCollection.tabAccessoryEnvironment == .inline view.updatePlayerAppearance(inline: isInline) } // Automatic trait tracking with updateProperties() override func updateProperties() { super.updateProperties() let isInline = traitCollection.tabAccessoryEnvironment == .inline updatePlayerAppearance(inline: isInline) } -
5:51 - Extend content under the sidebar
// Extend content underneath the sidebar let posterImageView = UIImageView(image: ...) let extensionView = UIBackgroundExtensionView() extensionView.contentView = posterImageView view.addSubview(extensionView) let detailsView = ShowDetailsView() view.addSubview(detailsView) -
6:51 - Adjust the effect layout
// Adjust the effect layout let posterImageView = UIImageView(image: ...) let extensionView = UIBackgroundExtensionView() extensionView.contentView = posterImageView extensionView.automaticallyPlacesContentView = false view.addSubview(extensionView) posterImageView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ posterImageView.topAnchor.constraint(equalTo: extensionView.topAnchor), posterImageView.leadingAnchor.constraint(equalTo: extensionView.safeAreaLayoutGuide.leadingAnchor), posterImageView.trailingAnchor.constraint(equalTo: extensionView.safeAreaLayoutGuide.trailingAnchor), posterImageView.bottomAnchor.constraint(equalTo: extensionView.safeAreaLayoutGuide.bottomAnchor), ]) -
8:38 - Custom grouping
// Custom grouping navigationItem.rightBarButtonItems = [ doneButton, flagButton, folderButton, infoButton, .fixedSpace(0), shareButton, selectButton ] -
8:53 - UIBarButtonItem tint color and style
// Tint color and style let flagButton = UIBarButtonItem(image: UIImage(systemName: "flag.fill")) flagButton.tintColor = .systemOrange flagButton.style = .prominent -
9:10 - Toolbar with evenly distributed items in a single background
// Toolbar with evenly distributed items, grouped in a single background. let flexibleSpace = UIBarButtonItem.flexibleSpace() flexibleSpace.hidesSharedBackground = false toolbarItems = [ .init(image: UIImage(systemName: "location")), flexibleSpace, .init(image: UIImage(systemName: "number")), flexibleSpace, .init(image: UIImage(systemName: "camera")), flexibleSpace, .init(image: UIImage(systemName: "trash")), ] -
10:15 - Titles and subtitles
// Titles and subtitles navigationItem.title = "Inbox" navigationItem.subtitle = "49 Unread" -
10:27 - Large subtitle view
// Titles and subtitles navigationItem.title = "Inbox" navigationItem.largeSubtitleView = filterButton -
11:20 - Edge effect for a custom container
// Edge effect’s custom container let interaction = UIScrollEdgeElementContainerInteraction() interaction.scrollView = contentScrollView interaction.edge = .bottom buttonsContainerView.addInteraction(interaction) -
11:48 - Hard edge effect style
// Hard edge effect style scrollView.topEdgeEffect.style = .hard -
13:55 - Morph popover from its source button
// Morph popover from its source button viewController.popoverPresentationController?.sourceItem = barButtonItem -
14:07 - Morph sheet from bar button
// Morph sheet from bar button viewController.preferredTransition = .zoom { _ in folderBarButtonItem } -
14:46 - Source item for action sheets
// Setting source item for action sheets alertController.popoverPresentationController?.sourceItem = barButtonItem -
15:36 - Placing search in the toolbar
// Place search bar in a toolbar toolbarItems = [ navigationItem.searchBarPlacementBarButtonItem, .flexibleSpace(), addButton ] -
16:01 - Universally accessible search on iPad
// Place search at the trailing edge of the navigation bar navigationItem.searchBarPlacementAllowsExternalIntegration = true -
16:47 - Activate the search field when search bar is tapped
// Activate the search field when search bar is tapped searchTab.automaticallyActivatesSearch = true -
17:03 - Search as a dedicated view
// Search as a dedicated view navigationItem.preferredSearchBarPlacement = .integratedCentered -
17:52 - Buttons
// Standard glass button.configuration = .glass() // Prominent glass tintedButton.configuration = .prominentGlass() -
18:16 - Neutral slider with 5 ticks and a neutral value
// Neutral slider with 5 ticks and a neutral value slider.trackConfiguration = .init(allowsTickValuesOnly: true, neutralValue: 0.2, numberOfTicks: 5) -
18:59 - Thumbless slider
// Thumbless slider slider.sliderStyle = .thumbless -
20:28 - Glass for custom views
// Adopting glass for custom views let effectView = UIVisualEffectView() addSubview(effectView) let glassEffect = UIGlassEffect() // Animating setting the effect results in a materialize animation UIView.animate { effectView.effect = glassEffect } -
20:49 - Custom corner configuration
// Custom corner configuration UIView.animate { effectView.cornerConfiguration = .fixed(8) } -
20:54 - Dark mode
// Adapting to dark mode UIView.animate { view.overrideUserInterfaceStyle = .dark } -
21:02 - Adding glass to an existing glass container
// Adding glass to an existing glass container let container = UIVisualEffectView() container.effect = UIGlassEffect() container.contentView.addSubview(effectView) -
21:08 - Container relative corners
// Container relative corners UIView.animate { effectView.cornerConfiguration = .containerRelative() effectView.frame.origin = CGPoint(x: 10, y: 10) } -
21:23 - Container relative corners, animated
// Container relative corners UIView.animate { effectView.frame.origin = CGPoint(x: 30, y: 30) } -
21:30 - Glass adapts based on its size
// Glass adapts based on its size UIView.animate { view.overrideUserInterfaceStyle = .light effectView.bounds.size = CGSize(width: 250, height: 88) } UIView.animate { effectView.bounds.size = CGSize(width: 150, height: 44) } -
21:49 - Adding content to glass views
// Adding content to glass views let label = UILabel() label.text = "WWDC25" label.textColor = .secondaryLabel effectView.contentView.addSubview(label) -
22:15 - Applying tint color to glass
// Applying tint color to glass let glassEffect = UIGlassEffect() glassEffect.tintColor = .systemBlue UIView.animate { effectView.effect = glassEffect label.textColor = .label } -
22:33 - Using custom colors with glass
// Using custom colors with glass let glassEffect = UIGlassEffect() glassEffect.tintColor = UIColor(displayP3Red: r, green: g, blue: b, alpha: 1) UIView.animate { effectView.effect = glassEffect // Animate out the label label.alpha = 0 } -
23:03 - Enabling interactive glass behavior
// Enabling interactive glass behavior let glassEffect = UIGlassEffect() glassEffect.isInteractive = true effectView.effect = glassEffect -
23:20 - Animating glass out using dematerialize animation
// Animating glass out using dematerialize animation UIView.animate { effectView.effect = nil } -
23:52 - Adding glass elements to a container
// Adding glass elements to a container let container = UIGlassContainerEffect() let containerView = UIVisualEffectView(effect: container) let glassEffect = UIGlassEffect() let view1 = UIVisualEffectView(effect: glassEffect) let view2 = UIVisualEffectView(effect: glassEffect) containerEffectView.contentView.addSubview(view1) containerEffectView.contentView.addSubview(view2) -
24:12 - Adjusting the container spacing
// Adjusting the container spacing let containerEffect = UIGlassContainerEffect() containerEffect.spacing = 20 containerEffectView.effect = containerEffect -
24:27 - Merging two glass views
// Merging two glass views UIView.animate { view1.frame = finalFrame view2.frame = finalFrame } -
24:33 - Dividing glass into multiple views
// Dividing glass into multiple views UIView.performWithoutAnimation { for view in finalViews { containerEffectView.contentView.addSubview(view) view.frame = startFrame } } UIView.animate { for view in finalViews { view.frame = finalFrame(for: view) } }
-
-
- 0:00 - Introducción
Descubre cómo puedes incorporar el nuevo lenguaje de diseño de iOS 26 en tus apps. El nuevo diseño, centrado en el material dinámico y translúcido llamado Liquid Glass, actualiza automáticamente la apariencia de las apps recopiladas con el último SDK. En este video, analizamos varios aspectos del nuevo diseño, incluidos la apariencia y el comportamiento actualizados de las vistas de pestañas, las vistas divididas, las barras de navegación y de herramientas, y mucho más, que ahora incluyen elementos de Liquid Glass. También se brinda orientación sobre cómo implementar Liquid Glass en elementos personalizados de la IU.
- 1:55 - Vistas de pestañas y vistas divididas
“UITabBarController” y “UISplitViewController” ahora tienen la apariencia moderna de Liquid Glass. En el iPhone, las barras de pestañas ahora flotan sobre el contenido y pueden minimizarse durante el desplazamiento para ayudar al usuario a enfocarse en el contenido. Puedes personalizar este comportamiento y agregar una vista adicional sobre de la barra de pestañas, que se desplaza hacia abajo cuando se minimiza. En el iPad, las barras de pestañas y las barras laterales también flotan con Liquid Glass. Las apps que adoptan “UITab” y “UITabGroup” se adaptan automáticamente para alternar entre las vistas de barra de pestañas y de barra lateral. Las barras laterales se ven mejor sobre contenido vibrante, lo que se logra con el nuevo “UIBackgroundExtensionView”, que crea un efecto visual armónico.
- 7:19 - Navegación y barras de herramientas
En iOS 26, las barras de navegación y de herramientas presentan una nueva apariencia similar al vidrio, donde los botones se agrupan automáticamente en fondos transparentes que flotan sobre el contenido. Los botones de texto, los botones “Listo” y “Cerrar”, y los botones de estilo destacados tienen fondos separados. Puedes personalizar los grupos de botones, los colores de tono y los fondos. “UINavigationItem” brinda más control sobre el título y las áreas de título grandes, y también permite configurar subtítulos. En las vistas de desplazamiento debajo de las barras de navegación o de herramientas, se aplica un efecto de borde para mejorar la legibilidad.
- 13:31 - Presentaciones
El diseño de presentaciones, menús, ventanas emergentes, hojas y hojas de acción ahora se actualiza para mejorar la continuidad visual. Los botones transparentes se transforman en menús y ventanas emergentes superpuestos, y las hojas ahora adaptan su apariencia al subir por la pantalla. En el iPhone y iPad, las hojas de acción se encuentran ancladas a sus vistas de origen y aparecen directamente sobre ellas. Elimina los fondos personalizados de las hojas y especifica las vistas de origen para que las hojas de acción y los controladores de alerta apliquen las transiciones y los comportamientos nuevos. En el iPhone, las hojas de acción en línea ya no tienen un botón para cancelar porque desaparecen al tocar en cualquier otro lugar.
- 15:18 - Buscar
La experiencia de búsqueda en el iPhone y iPad se mejoró en iOS 26. En el iPhone, la barra de búsqueda ahora se encuentra en la barra de herramientas y se muestra como un campo expandido o un botón según el espacio. En el iPad, la búsqueda se muestra en el borde posterior de la barra de navegación en las vistas divididas, o como pestaña dedicada en un “UITabBarController”, que se expande en un campo de búsqueda cuando el usuario la toca. También puedes personalizar la ubicación de la búsqueda en las barras laterales, de pestañas y de navegación, y habilitar la activación automática del campo de búsqueda al seleccionar una pestaña.
- 17:24 - Controles
En los controles de iOS, se aplicó un rediseño sutil que mantiene su familiaridad e incorpora los nuevos efectos de Liquid Glass. Los controles deslizantes tienen funcionalidades mejoradas, como conservación del impulso, el estiramiento y la opción de mostrar marcas de verificación, valores neutrales y un estilo sin pulgar que se asemeja a una barra de progreso. Liquid Glass ofrece dos nuevas apariencias para los botones. Asegúrate de que tus diseños se adapten a los tamaños actualizados de los controles.
- 19:15 - Elementos personalizados
UIKit proporciona API para que puedas incorporar Liquid Glass en tu IU personalizada. Usa Liquid Glass con moderación para los elementos más importantes. Para aplicar el efecto a vistas personalizadas, usa “UIVisualEffectView” y “UIGlassEffect”, y personaliza la forma, la apariencia y el color del tinte. Puedes aplicar animaciones a elementos de Liquid Glass para que se materialicen, se desmaterialicen y se fusionen perfectamente como gotas de agua cuando se superponen. El “UIGlassContainerEffect” garantiza una adaptación y una consistencia uniformes en diferentes fondos. Los elementos interactivos pueden adaptar su escala y rebotar según las interacciones del usuario, lo que mejora la experiencia.
- 25:01 - Próximos pasos
Liquid Glass presenta nuevos componentes y materiales de UIKit que puedes integrar fácilmente en tus apps. Crea tus apps con Xcode 26, revisa cada pantalla y considera reemplazar los controles personalizados con los controles estándares de UIKit. Aprovecha Liquid Glass para mejorar el diseño de tu app y generar resultados destacados en tus casos de uso especiales.