0Pricing
Swift Academy · Lección

UIHostingController: SwiftUI dentro de UIKit

Integre vistas de SwiftUI en apps de UIKit mediante UIHostingController.

UIHostingController: SwiftUI dentro de UIKit es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué es UIHostingController?

UIHostingController es un controlador de vistas de UIKit que aloja una jerarquía de vistas de SwiftUI.

import SwiftUI
let swiftUIView = Text("Hello from SwiftUI")
let hostingVC = UIHostingController(rootView: swiftUIView)

Integración en un UIViewController

Añada un controlador de hosting como controlador de vistas hijo mediante la API estándar para controladores hijos.

class MyViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    let child = UIHostingController(rootView: ContentView())
    addChild(child)
    view.addSubview(child.view)
    child.view.frame = view.bounds
    child.didMove(toParent: self)
  }
}

Auto Layout con un controlador de hosting

Fije la vista del controlador de hosting con Auto Layout para integrarla en un diseño de UIKit.

child.view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
  child.view.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
  child.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
  child.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
  child.view.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])

Actualización de la vista raíz

Actualice la vista de SwiftUI alojada estableciendo rootView en el controlador de hosting.

let hostingVC = UIHostingController(rootView: MyView(count: 0))
// Later:
hostingVC.rootView = MyView(count: 5)

Presentación modal

Presente un controlador de hosting como cualquier elemento modal de UIKit para incorporar contenido de SwiftUI en una presentación de UIKit.

let vc = UIHostingController(rootView: MySwiftUIView())
present(vc, animated: true)

Inserción en la pila de navegación

Inserte un controlador de hosting en un UINavigationController para navegar al contenido de SwiftUI desde UIKit.

let vc = UIHostingController(rootView: DetailView())
navigationController?.pushViewController(vc, animated: true)

Uso compartido de datos mediante ObservableObject

Pase un ObservableObject compartido al entorno de la vista de SwiftUI para obtener un flujo de datos bidireccional.

let model = SharedModel()
let vc = UIHostingController(rootView: SwiftUIView().environmentObject(model))
// Changes to model in UIKit update SwiftUI and vice versa

Cálculo del tamaño del controlador de hosting

Use sizeThatFits para calcular el tamaño intrínseco del contenido de SwiftUI al integrarlo en vistas de desplazamiento.

let size = hostingVC.sizeThatFits(in: CGSize(width: 320, height: UIView.layoutFittingCompressedSize.height))
hostingVC.view.frame.size = size

Apariencia y estilo

Establezca overrideUserInterfaceStyle en el controlador de hosting para controlar independientemente el modo claro u oscuro.

hostingVC.overrideUserInterfaceStyle = .dark

Configuración de una app basada en escenas

En una app basada principalmente en UIKit, puede reemplazar el controlador de vistas raíz por un controlador de hosting para realizar una migración gradual.

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options: UIScene.ConnectionOptions) {
  guard let windowScene = scene as? UIWindowScene else { return }
  let window = UIWindow(windowScene: windowScene)
  window.rootViewController = UIHostingController(rootView: ContentView())
  self.window = window
  window.makeKeyAndVisible()
}

Casos de uso

UIHostingController es ideal para una migración gradual: mantenga la navegación de UIKit mientras integra nuevas pantallas de funcionalidades de SwiftUI.

// UIKit app gradually migrated:
// - Old screens: UIViewController
// - New screens: UIHostingController(rootView: NewFeatureView())

Comprobación rápida

¿Qué clase de UIKit se utiliza para integrar una vista de SwiftUI dentro de una jerarquía de controladores de vistas de UIKit?

Repaso de la lección

UIHostingController(rootView:) conecta SwiftUI con UIKit. Añádalo como controlador de vistas hijo con restricciones de Auto Layout, o preséntelo o insértelo en la navegación. Actualícelo mediante rootView. Comparta datos mediante ObservableObject y environmentObject.

Preguntas frecuentes

¿La lección «UIHostingController: SwiftUI dentro de UIKit» es gratis?

Sí — el texto completo de «UIHostingController: SwiftUI dentro de UIKit» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «UIHostingController: SwiftUI dentro de UIKit»?

Integre vistas de SwiftUI en apps de UIKit mediante UIHostingController. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «UIHostingController: SwiftUI dentro de UIKit»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. UIViewRepresentable: integración de vistas de UIKit
  2. Patrón Coordinator para la comunicación con delegates
  3. UIViewControllerRepresentable
  4. UIHostingController: SwiftUI dentro de UIKit
← Volver a Swift Academy