View in English

  • Global Nav Open Menu Global Nav Close Menu
  • Apple Developer
Search
Cancel
  • Apple Developer
  • News
  • Discover
  • Design
  • Develop
  • Distribute
  • Support
  • Account
Only search within “”

Quick Links

5 Quick Links

Vidéos

Ouvrir le menu Fermer le menu
  • Collections
  • Sujets
  • Toutes les vidéos
  • À propos

Plus de vidéos

  • À propos
  • Résumé
  • Transcription
  • Code
  • Créez un UIKit app avec le nouveau design

    Mettez à jour votre app UIKit pour tirer pleinement parti du nouveau système de conception. Nous nous pencherons sur les principales modifications apportées aux vues d'onglets, aux vues fractionnées, aux barres, aux présentations, à la recherche et aux commandes, et nous vous montrerons comment utiliser Liquid Glass dans votre interface utilisateur personnalisée. Pour tirer le meilleur parti de cette vidéo, nous vous recommandons de regarder d'abord « Apprenez à connaître le nouveau système de conception » pour obtenir des conseils généraux sur la conception.

    Chapitres

    • 0:00 - Introduction
    • 1:55 - Vues par onglets et vues scindées
    • 7:19 - Navigation et barres d’outils
    • 13:31 - Présentations
    • 15:18 - Recherche
    • 17:24 - Contrôles
    • 19:15 - Éléments personnalisés
    • 25:01 - Étapes suivantes

    Ressources

    • Adopting Liquid Glass
    • Human Interface Guidelines
      • Vidéo HD
      • Vidéo SD

    Vidéos connexes

    WWDC25

    • Découvrez le nouveau système de conception
    • Découvrez Liquid Glass
    • Nouveautés dans UIKit
    • Rendez votre app UIKit plus flexible

    WWDC24

    • Elevate your tab and sidebar experience in iPadOS
    • Enhance your UI animations and transitions
  • Rechercher dans cette vidéo…

    Bonjour, bienvenue dans « Concevez une app UIKit avec le nouveau design ». Je m’appelle Sanaa, je suis ingénieure au sein de l’équipe UIKit. Dans cette vidéo, je vous montre comment adopter le nouveau design, et appliquer Liquid Glass à vos apps !

    iOS 26 inaugure un nouveau design qui redéfinit l’apparence des matériaux et des commandes dans l’ensemble du système. Un nouveau matériau appelé Liquid Glass est au cœur de ce design. Il est translucide, dynamique et vivant. Les composants et matériaux de l’UIKit ont été mis à jour dans l’ensemble du système avec Liquid Glass.

    Vos apps bénéficieront de cette nouvelle apparence dès que vous effectuerez une recompilation avec le nouveau SDK. Si vous ne l’avez pas déjà fait, je vous recommande de visionner les vidéos de design « Meet Liquid Glass » et « Design with the Liquid Glass Design System » pour maîtriser les bonnes pratiques de ce nouveau système.

    Je commencerai par expliquer comment ce nouveau système s’applique aux onglets et aux vues scindées et les fait flotter au-dessus du contenu.

    Je parlerai ensuite de la nouvelle apparence des barres de navigation et d’outils. Elles sont désormais translucides, contiennent des boutons Liquid Glass et allouent plus d’espace à votre contenu.

    J’évoquerai les nouveautés des présentations, y compris une transition zoom optimisée et un nouveau comportement des alertes et des feuilles action.

    J’expliquerai comment l’expérience de recherche a été améliorée, avec plus d’options pour positionner la barre de recherche.

    J’aborderai les commandes, comme les boutons, les commutateurs et les curseurs, et je vous montrerai comment appliquer le style Liquid Glass à vos éléments de UI personnalisés.

    Commençons par les vues d’onglets et les vues scindées.

    UITabBarController et UISplitViewController ont été mis à jour avec la nouvelle apparence Liquid Glass.

    Les barres d’onglets confèrent à votre app une navigation persistante de premier ordre. Elles offrent une vue d’ensemble immédiate de votre app et permettent de passer rapidement d’une section à l’autre. Avec le nouveau design, la barre d’onglets de l’iPhone flotte au-dessus du contenu et peut être configurée pour se réduire lors du défilement et vous aider ainsi à rester concentré sur le contenu.

    Pour permettre à la barre d’onglets de se réduire lors du défilement, paramétrez tabBarMinimizeBehavior dans la direction souhaitée. Ici, l’app TV lui attribue la valeur .onScrollDown. La barre d’onglets se redéploie lorsque vous faites défiler la page dans la direction opposée.

    Au-dessus de la barre d’onglets, vous pouvez afficher une vue secondaire, comme le mini lecteur de l’app Musique. UITabBarController affiche l’accessoryView au-dessus de la barre d’onglets, tout en utilisant la même apparence. Lorsque la barre d’onglets est réduite, la vue secondaire s’anime vers le bas pour suivre la barre d’onglets dans son sillage.

    Pour définir une vue secondaire inférieure, créez un UITabAccessory avec votre vue de contenu. Ensuite, paramétrez la propriété bottomAccessory sur UITabBarController.

    Lorsque la vue secondaire est alignée sur la barre d’onglets, l’espace pour son affichage est réduit. Ici, l’app Musique s’adapte à l’espace réduit en masquant certaines commandes multimédias du mini lecteur.

    Pour ajuster la vue secondaire, éditez le code relatif tabAccessoryEnvironment pour découvrir les changements. Vérifiez si la vue secondaire est alignée sur la barre d’onglets et mettez à jour la vue si nécessaire.

    Vous pouvez utiliser updateProperties pour mettre à jour votre vue secondaire avec le suivi automatique des caractéristiques.

    Pour en savoir plus sur le suivi automatique des caractéristiques et la nouvelle méthode updateProperties, consultez « What’s new in UIKit ».

    Sur iPad, la barre d’onglets et la barre latérale sont repensées avec Liquid Glass. Elles flottent au-dessus de votre contenu lorsque vous utilisez UITabBarController. Avec UITab et UITabGroup, vous bénéficiez d’une adaptabilité automatique pour votre app, ce qui permet de basculer entre la barre d’onglets et la barre latérale sur iPad. Pour en savoir plus, visionnez les vidéos « Elevate your tab and sidebar experience in iPadOS » de la WWDC24 et « Make your UIKit app more flexible » de la WWDC25.

    Avec le nouveau design, les barres latérales sont plus esthétiques lorsqu’elles recouvrent un contenu dynamique assorti à la vue de défilement principale. L’app TV sur iOS 26 en est un excellent exemple. L’illustration semble s’étendre sur tout l’écran en passant sous la barre latérale. Elle reste centrée et entièrement visible. Cet effet est utilisé dans de nombreuses apps sous iOS 26, et votre app aura fière allure grâce au nouveau UIBackgroundExtensionView !

    La vue étendue doit couvrir toute la largeur, y compris la zone de sécurité principale de la barre latérale. Une vue de contenu est utilisée pour appliquer l’effet. Par exemple, une vue d’image. Elle est placée dans la hiérarchie des vues et étendue de manière fluide pour remplir l’espace vide.

    C’est un effet spécial qui doit être utilisé à dessein. Des sections comme la liste des épisodes en bas défilent naturellement sous la barre latérale et n’ont pas besoin d’être étendues.

    Les éléments au-dessus de l’illustration, comme le nom et la description de l’émission, ne doivent pas non plus être étendus. Assurez-vous de les ajouter en tant que parents de la vue étendue, et non secondaires.

    Le contrôleur de vue de l’émission dispose déjà d’une vue d’image pour l’illustration. Pour ajouter l’effet, créez un backgroundExtensionView et attribuez la vue de l’image à sa propriété contentView. Ajoutez la vue étendue à votre hiérarchie. Et enfin, ajoutez la vue détaillée en tant que parent de la vue étendue. Par défaut, la vue de contenu remplit la zone sûre de la vue étendue. Tous les bords ayant un inset de zone sûre positif sont étendus pour remplir l’espace vide. Dans cet exemple, il s’agit du bord supérieur de la barre de navigation et d’état, et du bord avant de la barre latérale. L’app TV ayant très peu de contenu dans la barre de navigation qui pourrait couvrir l’illustration, elle n’a pas besoin de l’effet d’extension en haut. Au lieu de cela, la vue de contenu est positionnée manuellement en dehors de la zone sûre en haut.

    Je vais revenir à l’exemple de code pour ajuster manuellement la mise en forme des effets. Tout d’abord, définissez automaticallyPlacesContentView sur false dans la vue d’extension. Utilisez les contraintes AutoLayout pour positionner la vue de l’image en haut de l’écran. Pour étendre la vue de l’image sous la barre latérale, ajoutez une contrainte pour leadingAnchor équivalente à safeAreaLayoutGuide dans extensionView.

    N’oubliez pas non plus d’ajouter des contraintes pour les ancrages traînant et inférieur.

    Examinons l’apparence et le comportement des barres de navigation et d’outils dans le nouveau design. Dans iOS 26, les barres de navigation et d’outils adoptent le look Liquid Glass et flottent au-dessus du contenu. Lorsque vous spécifiez des éléments de barres d’outils ou de navigation barButton, le système les sépare automatiquement en groupes visuels d’éléments. Chaque groupe partage un arrière-plan translucide.

    Par défaut, les boutons de barre qui utilisent des images partagent l’arrière-plan avec d’autres boutons d’image. Les groupes de boutons comportant plusieurs éléments partagent également leur arrière-plan.

    Les boutons de texte, les boutons « Terminé » et « Fermer » du système, et les boutons au style marqué ont des arrière-plans translucides distincts. Cet exemple illustre l’application de ces règles, où le bouton « Sélectionner » au début et le bouton « Terminé » à la fin ne partagent pas l’arrière-plan translucide avec les 4 boutons d’image au milieu. Pour configurer la navigationBar, attribuez tous les BarButtonItems directement au rightBarButtonItems de navigationItem. Cela active le comportement par défaut du système évoqué précédemment. Pour scinder davantage les éléments en groupes distincts, utilisez un élément fixedSpace. Dans cet exemple, je veux séparer le bouton « Partager ». J’insère donc un fixedSpace entre les boutons de partage et d’information.

    Les boutons de la barre utilisent labelColor par défaut pour améliorer la lisibilité. Si une couleur est nécessaire pour communiquer des informations sur l’action, vous pouvez spécifier une teinte différente.

    Ici, je vais mettre à jour le bouton drapeau pour utiliser systemOrange comme tintColor.

    Seul le symbole du drapeau sera coloré.

    Pour teinter l’arrière-plan du bouton, définissez le style sur prominent.

    Auparavant, vous utilisiez des espaces flexibles pour distribuer uniformément les éléments de votre barre d’outils. Avec Liquid Glass, chaque élément flexibleSpace sépare par défaut l’arrière-plan entre les éléments.

    Pour distribuer uniformément les éléments et les regrouper sur un seul arrière-plan, utilisez des espaces flexibles avec hidesSharedBackground défini sur false.

    Dans iOS 26, UINavigationItem offre un meilleur contrôle des zones de titre et de grand titre dans la navigationBar. Cela inclut l’ajout d’un nouveau sous-titre qui s’affiche sous le titre.

    Utilisez des chaînes attribuées pour effectuer des ajustements précis du titre et du sous-titre.

    Spécifiez des vues personnalisées pour ajouter des éléments interactifs. Les grands titres sont placés en haut de la vue de défilement du contenu et défilent avec le contenu sous la barre.

    Pour que le grand titre reste visible, étendez entièrement la vue de défilement sous la navigationBar.

    Par exemple, Mail place le champ de recherche dans la barre d’outils et affiche le nombre d’e-mails non lus dans la barre de navigation à l’aide de la nouvelle API de sous-titres.

    Lors du filtrage des e-mails, Mail affiche le filtre actuel dans un bouton situé sous le grand titre. Le bouton est défini en tant que largeSubtitleView sur navigationItem, et s’affiche sous le grand titre dans la navigationBar. Avec le système de conception d’iOS 26, l’arrière-plan de la barre est désormais translucide par défaut. Supprimez toute personnalisation d’arrière-plan de vos barres de navigation et d’outils. L’utilisation de UIBarAppearance ou de backgroundColor interfère avec l’aspect du verre.

    Les boutons de la barre utilisent un arrière-plan de verre. Mettez en forme le contenu de votre customView avec des marges de mise en forme pour un espacement correct. Toutes les vues de défilement situées sous les barres de navigation ou d’outils appliquent automatiquement un traitement visuel. Cela garantit la lisibilité des contenus qui se chevauchent dans les barres. C’est ce qu’on appelle un effet de bord. Ce nouvel effet de bord n’est pas réservé aux barres système. Vous pouvez également l’utiliser avec des conteneurs personnalisés de vues qui recouvrent un bord d’une vue de défilement ! Cet exemple montre deux boutons recouvrant le bord inférieur de la vue de défilement. Pour insérer un effet de bord derrière cette pile de boutons, créez une scrollEdgeElementContainerInteraction, attribuez la contentScrollView et le bord, puis ajoutez-la à la buttonsContainerView. Pour les UI plus denses avec de nombreux éléments flottants, optez pour un style de bord dur sur tous les bords d’une vue de défilement. Leur apparence est similaire à celle des arrière-plans de barre standard dans iOS 18. Pour l’activer, définissez le style de l’effet de bord sur .hard. iOS 18 a introduit une transition de zoom toujours interactive et interruptible. iOS 26 apporte la même fluidité à la transition standard de navigation par glissement.

    Ici, j’utilise l’app Notes. Je peux ouvrir une note et l’app reste réactive pendant la transition.

    Je peux immédiatement revenir en arrière, ou commencer à faire défiler la page alors que la transition est encore en cours. Je peux immédiatement appuyer plusieurs fois sur le bouton de retour pour revenir encore plus rapidement en arrière.

    C’est une excellente chose, car les utilisateurs peuvent interagir à tout moment avec votre app. Bien sûr, cela signifie aussi que votre app doit être prête à interagir à tout moment. Pour apprendre à gérer correctement les transitions interrompables, consultez « Enhance your UI animations and transitions ». Je peux aussi balayer vers l’arrière n’importe où dans la zone de contenu, et pas seulement sur le bord avant. Le nouveau geste de retour interactif vérifie automatiquement la présence d’autres interactions concurrentes.

    Par exemple, les actions de balayage empêchent le retour interactif du contenu. Cela serait cependant autorisé dans les zones non interactives.

    Pour avoir la priorité sur le balayage de retour interactif, les gestes personnalisés doivent définir une exigence d’échec sur interactiveContentPopGestureRecognizer.

    Le nouveau design concerne également les présentations, y compris la nouvelle transition de zoom dynamique. Lorsqu’une présentation, comme un menu ou une fenêtre contextuelle, est créée à partir d’un bouton translucide, le bouton se métamorphose en une superposition.

    Cela permet de maintenir la continuité visuelle entre la source et la présentation tout au long de l’animation.

    Les menus bénéficient automatiquement de ce comportement. Les fenêtres contextuelles bénéficient aussi de cette animation lorsque leur source est un barButtonItem. Les feuilles peuvent adopter cet effet en utilisant la transition zoom optimisée. Attribuez la valeur .zoom à la transition préférée sur le viewController et renvoyez la source barButtonItem dans la fermeture.

    Les feuilles affichent un design actualisé dans iOS 26. Elles adaptent leur apparence aux différentes hauteurs. Pour profiter de leur nouvelle apparence translucide, supprimez tous les arrière-plans personnalisés.

    Sur iPad, les feuilles action sont ancrées sur leur vue d’origine. À partir d’iOS 26, elles se comportent de la même manière sur l’iPhone, en s’affichant au-dessus de la vue d’origine.

    Dans l’alertController, veillez à définir l’élément source ou la vue source sur popoverPresentationController, quel que soit l’appareil. L’attribution de la vue source applique automatiquement les nouvelles transitions aux feuilles action !

    Les feuilles action présentées en ligne n’ont pas de bouton d’annulation, car l’action d’annulation est implicite en appuyant n’importe où. Si vous ne spécifiez pas de source, la feuille action sera centrée et dotée d’un bouton d’annulation. iOS 26 offre une nouvelle expérience de recherche plus intégrée, en vous permettant de positionner le champ de recherche là où il convient le mieux. Sur iPhone, la barre de recherche se déplace automatiquement vers la barre d’outils, pour un accès facile.

    Si vous disposez déjà d’une barre d’outils, ajoutez un searchBarPlacementBarButtonItem aux autres boutons. Le champ sera positionné exactement là où vous le souhaitez.

    Il apparaîtra sous la forme d’un champ développé ou d’un bouton de barre d’outils, selon l’espace disponible.

    Sur l’iPad, pour une recherche accessible à tous, suivez le modèle de la barre d’outils macOS. Placez la recherche à l’extrémité droite la navigationBar. C’est idéal pour les vues scindées. Attribuez la valeur true à searchBarPlacementAllowsExternalIntegration sur l’élément de navigation.

    Pour que la recherche soit disponible d’une vue à une autre, utilisez un UITabBarController. Un onglet réservé à la recherche peut désormais être ajouté sur le bord traînant. Lorsque vous touchez l’écran, le bouton de recherche devient un champ et les autres boutons se réduisent.

    Cet onglet de recherche tabView est idéal pour placer des suggestions de recherche. Par défaut, il est possible de sélectionner l’une de ces suggestions ou d’appuyer sur le champ de recherche pour lancer la recherche.

    Pour que le champ de recherche s’active automatiquement lorsque l’on appuie sur l’onglet de recherche, attribuez la valeur true à l’option automaticallyActivateSearch sur cet onglet.

    Pour disposer de vues dédiées à la recherche, ajoutez la recherche en tant que section dans la barre latérale ou la barre d’onglets. La barre de recherche peut être intégrée au bord traînant de la barre de navigation, empilée ou centrée par rapport à la largeur normale de l’iPad. Pour centrer la searchBar, utilisez integratedCentered comme preferredSearchBarPlacement. Lorsque la tabBar est visible, la searchBar est placée en dessous. Parlons de l’apparence actualisée des commandes.

    Les commandes sur iOS sont dotées d’une nouvelle apparence, tout en restant parfaitement familières. Les tailles sont modifiées pour les commandes comme UISwitch. Vérifiez que vos mises en forme tiennent compte de cette modification. Les boutons de commande, comme ceux des interrupteurs et de segmentedControl, adoptent automatiquement Liquid Glass lors des interactions.

    En plus des styles de bouton existants, deux apparences translucides sont disponibles avec UIButtonConfiguration. Utilisez la configuration .glass() pour une apparence translucide standard. Et .prominentGlass() pour un verre teinté selon la couleur de votre app. Quant aux curseurs, en plus des effets Liquid Glass sur le bouton, ils conservent désormais leur élan et s’étirent lorsqu’ils sont activés. Sur iOS 26, les curseurs prennent désormais en charge les coches avec une TrackConfiguration. Cela permet de configurer l’apparence et le comportement du curseur. Par exemple, pour limiter ce curseur de vitesse à 5 valeurs, définissez une configuration de piste avec allowsTickValuesOnly et 5 coches.

    Les curseurs peuvent être configurés pour utiliser une valeur neutre, afin d’ancrer le remplissage du curseur en tout point de la glissière, au lieu de le limiter à l’extrémité minimale. Cela permet au remplissage du curseur d’afficher la différence entre la valeur sélectionnée et la valeur neutre. Ici, le remplissage du curseur affiche une vitesse sélectionnée plus élevée que celle par défaut. Les curseurs peuvent ressembler à une barre de progression lorsqu’ils ne sont pas interactifs. C’est idéal pour la lecture multimédia, afin de ne pas être distrait par un bouton pendant la lecture. Ce sont les endroits où les commandes du système ont adopté Liquid Glass. Pour vos cas particuliers, UIKit propose des API permettant d’adopter la nouvelle apparence Liquid Glass. Lorsque vous utilisez Liquid Glass dans votre UI, gardez à l’esprit l’intention créative du verre liquide. Liquid Glass se distingue des autres effets visuels, comme UIBlurEffect. À ce titre, des endroits spécifiques se prêtent à son utilisation. Liquid Glass est conçu pour être une couche interactive. Il flotte au-dessus de votre contenu, juste en dessous des doigts, et offre à l’utilisateur un accès aux principales commandes tactiles. Pour cette raison, limitez Liquid Glass aux éléments les plus importants de votre app. Si possible, utilisez les vues et les commandes du système pour une expérience optimale.

    Plans utilise Liquid Glass pour des boutons personnalisés qui flottent au-dessus de la carte. Ils offrent une couche de contrôle distincte et naturelle. Ils se prêtent ainsi parfaitement à l’effet Liquid Glass qui les rend flottants. Et lorsque la feuille s’agrandit, Plans supprime les boutons. Cela évite aux éléments en verre de se chevaucher et maintient intacte l’illusion d’une seule couche de verre flottante.

    Pour utiliser le verre avec des vues personnalisées, créez un UIVisualEffectView et un UIGlassEffect. Dans un bloc d’animation, définissez l’effet.

    Le verre apparaît à l’aide d’une animation matérialisée spéciale.

    Par défaut, le verre a la forme d’une capsule. Pour personnaliser la forme, utilisez la nouvelle API de configuration des coins.

    Le verre a un aspect sombre et clair. Il s’adapte au userInterfaceStyle sélectionné. Lorsque vous ajoutez l’effet Liquid Glass à un conteneur en verre existant, son apparence s’adapte automatiquement. Pour que les coins s’adaptent automatiquement à leur conteneur, utilisez la configuration de coins .containerRelative. Lorsque l’on rapproche la vue de l’angle du conteneur, le cornerRadius s’adapte automatiquement.

    Lorsque l’on s’éloigne, le rayon de l’angle diminue, afin de conserver automatiquement la concentricité. Le verre adapte son apparence en fonction de sa taille.

    Une taille plus grande est plus opaque.

    Une taille plus petite est plus claire et bascule automatiquement du mode clair au mode sombre pour augmenter le contraste.

    Pour ajouter du contenu, comme des étiquettes et des images, utilisez le contentView de visualEffectView. L’étiquette devient automatiquement dynamique, en fonction de sa textColor. Cela permet de garantir la lisibilité sur une grande variété d’arrière-plans.

    En fonction des couleurs de l’arrière-plan, le verre et son contenu passeront automatiquement en mode clair ou sombre, lors de l’utilisation de couleurs dynamiques.

    Pour mettre en évidence des vues proéminentes, définissez .tintColor pour le verre et animez-le en même temps que les autres propriétés du verre. Animez en même temps les modifications apportées à votre contenu, comme textColor.

    Pour utiliser une teinte personnalisée avec le verre, créez un UIGlassEffect, attribuez un tintColor personnalisé et animez l’effet sur le nouveau UIGlassEffect. La couleur du verre teinté s’adapte automatiquement à une version dynamique. Pour supprimer le contenu au-dessus de votre verre, attribuez une valeur alpha zéro au contenu.

    Les éléments interactifs du système, tels que les boutons, réagissent aux interactions de l’utilisateur. Lorsque l’on touche le bouton, il s’élargit et rebondit. Pour obtenir le même type d’interactivité dans vos vues personnalisées, attribuez la valeur true à isInteractive pour le glassEffect.

    Enfin, lorsque vous n’avez plus besoin du verre à l’écran, supprimez l’animation en réglant l’effet sur nil.

    Préférez toujours la propriété effect à la propriété alpha pour vous assurer que le verre se dématérialise ou se matérialise avec l’animation appropriée. Dans ces exemples, il n’y avait qu’une seule vue utilisant Liquid Glass. Le verre présente un comportement intégré supplémentaire lorsque plusieurs éléments interagissent. Liquid Glass peut se fondre harmonieusement parmi différentes formes.

    Pour fusionner dynamiquement des vues en verre, utilisez un UIGlassContainerEffect, configurez un UIVisualEffectView avec, créez vos vues en verre et ajoutez-les en tant que vues secondaires au contentView de vos conteneurs. Tant qu’il y a de l’espace entre elles, elles apparaissent comme deux vues séparées.

    Lorsqu’elles se rapprochent, elles commencent à fusionner comme des gouttelettes d’eau. Pour contrôler la distance à laquelle elles commencent à s’influencer, utilisez la propriété spacing sur UIGlassContainerEffect.

    Lors de l’animation dans un cadre superposé, les vues en verre se combinent en une seule forme. Pour diviser le verre en plusieurs éléments, ajoutez-les d’abord au même endroit sans animation. Ensuite, animez-les ensemble !

    UIGlassContainerEffect ne se contente pas d’activer les animations. Il impose une adaptation uniforme ! Le verre s’adapte dynamiquement à son arrière-plan, tout en conservant un aspect uniforme.

    J’ai passé en revue les composants et matériaux UIKit mis à jour dans Liquid Glass. UIKit vous offre tous les outils pour mettre à jour votre app avec le nouveau design. À partir de là, commencez par créer votre app avec Xcode 26. Une grande partie du nouveau design fonctionnera immédiatement dans votre app. Vérifiez votre app écran par écran et identifiez les vues qui ressortent.

    Si vous disposez de commandes personnalisées, déterminez si les commandes UIKit standard sont mieux adaptées. Et enfin, déterminez comment vous pouvez faire ressortir vos cas d’utilisation particuliers avec Liquid Glass.

    J’ai hâte de découvrir votre app une fois que vous aurez adopté le nouveau système de design. Merci de votre attention.

    • 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 - Introduction
    • Découvrez comment intégrer le nouveau langage de conception d’iOS 26 à vos apps. La nouvelle conception, centrée sur le style dynamique et translucide appelé Liquid Glass, met automatiquement à jour l’apparence des apps recompilées avec le dernier SDK. Cette vidéo couvre divers aspects de la nouvelle conception, notamment la nouvelle apparence et le nouveau comportement des vues par onglets, des vues scindées, des barres de navigation, des barres d’outils, etc., qui comportent désormais des éléments Liquid Glass. Elle propose également des conseils sur l’application de Liquid Glass aux éléments d’interface utilisateur personnalisés.

    • 1:55 - Vues par onglets et vues scindées
    • Grâce à leur mise à jour, « UITabBarController » et « UISplitViewController » ont désormais une apparence Liquid Glass moderne. Les barres d’onglets de l’iPhone flottent désormais au-dessus du contenu et peuvent être réduites lors du défilement, pour améliorer la concentration. Vous pouvez personnaliser ce comportement et ajouter une vue accessoire au-dessus de la barre d’onglets, qui s’anime vers le bas lorsqu’elle est réduite. Sur iPad, les barres d’onglets et les barres latérales flottent également dans Liquid Glass. Les apps qui adoptent « UITab » et « UITabGroup » basculent automatiquement entre les vues barre d’onglets et barre latérale. Les barres latérales sont plus esthétiques lorsqu’elles recouvrent un contenu dynamique, et ce grâce à la nouvelle « UIBackgroundExtensionView » qui crée un effet visuel transparent.

    • 7:19 - Navigation et barres d’outils
    • Dans iOS 26, la navigation et les barres d’outils présentent une nouvelle apparence semblable à du verre, flottant au-dessus du contenu et rassemblant automatiquement les éléments des boutons de barre en groupes visuels partageant des arrière-plans translucides. Les boutons de texte, les boutons « Terminé » et « Fermer » du système, ainsi que les boutons au style marqué ont des arrière-plans distincts. Vous pouvez personnaliser les groupes de boutons, les couleurs de teinte et les arrière-plans. « UINavigationItem » offre un meilleur contrôle sur les zones de titre et de grand titre, et permet également de définir des sous-titres. Les vues de défilement situées sous les barres de navigation ou les barres d’outils appliquent un effet de bord pour la lisibilité.

    • 13:31 - Présentations
    • Le design des présentations, des menus, des fenêtres contextuelles, des fiches et des feuilles Action est maintenant mis à jour pour améliorer la continuité visuelle. Les boutons en verre se transforment en incrustations pour les menus et les fenêtres contextuelles, et les fiches adaptent désormais leur apparence en passant de petites à de grandes hauteurs. Sur iPhone comme sur iPad, les feuilles Action sont ancrées à leur vue source et apparaissent directement au-dessus. Supprimez les arrière-plans personnalisés des fiches et spécifiez des vues sources pour les feuilles Action et les contrôleurs d’alerte afin d’appliquer les nouvelles transitions et les nouveaux comportements. Les feuilles Action intégrées sur iPhone n’ont plus de bouton d’annulation, car le fait de toucher n’importe où ailleurs les fait disparaître.

    • 15:18 - Recherche
    • iOS 26 améliore l’expérience de recherche sur iPhone et iPad. Sur iPhone, la barre de recherche se trouve désormais dans la barre d’outils, apparaissant sous forme de champ étendu ou de bouton en fonction de l’espace. Sur iPad, la recherche se trouve au niveau du bord arrière de la barre de navigation pour les vues scindées ou se présente sous forme d’onglet dédié dans un « UITabBarController » et se transforme en champ de recherche lorsque vous touchez l’écran. Vous pouvez également personnaliser le placement de la recherche dans les barres latérales, les barres d’onglets et les barres de navigation, et permettre l’activation automatique des champs de recherche une fois l’onglet sélectionné.

    • 17:24 - Contrôles
    • Les commandes iOS ont subi une refonte subtile, conservant leur familiarité tout en intégrant de nouveaux effets Liquid Glass. Les curseurs ont des fonctionnalités améliorées telles que la conservation de l’élan, l’étirement et la possibilité d’afficher des marques de graduation, des valeurs neutres ainsi qu’un style sans bouton ressemblant à une barre de progression. Deux nouvelles apparences Liquid Glass sont disponibles pour les boutons. Assurez-vous que vos dispositions prennent en charge les tailles de commande mises à jour.

    • 19:15 - Éléments personnalisés
    • UIKit fournit des API pour vous permettre d’appliquer Liquid Glass à votre interface utilisateur personnalisée. Utilisez Liquid Glass avec parcimonie pour les éléments les plus importants. Appliquez l’effet à des vues personnalisées à l’aide d’une « UIVisualEffectView » et d’un « UIGlassEffect », puis personnalisez la forme, l’apparence et la couleur de la teinte. Vous pouvez animer les éléments Liquid Glass pour qu’ils se matérialisent, se dématérialisent et fusionnent comme des gouttelettes d’eau lorsqu’ils se chevauchent. Le « UIGlassContainerEffect » assure une adaptation uniforme et une cohérence entre les différents arrière-plans. Les éléments interactifs peuvent s’élargir et rebondir après l’interaction utilisateur, améliorant ainsi l’expérience.

    • 25:01 - Étapes suivantes
    • Liquid Glass introduit de nouveaux composants et matériaux UIKit que vous pouvez facilement intégrer dans les apps. Compilez vos apps avec Xcode 26, auditez chaque écran et envisagez de remplacer les contrôles personnalisés par des contrôles UIKit standard. Utilisez Liquid Glass pour améliorer le design de votre app, tout en mettant en valeur des cas d’utilisation spécifiques.

Developer Footer

  • Vidéos
  • WWDC25
  • Créez un UIKit app avec le nouveau design
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • App Store
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Fonts
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Open Source
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Sample Code
    • Tutorials
    • Downloads
    • Forums
    • Videos
    Open Menu Close Menu
    • Support Articles
    • Contact Us
    • Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Get the Apple Developer app.
    Copyright © 2025 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines