0Pricing
Swift Academy · Lezione

UIHostingController: SwiftUI dentro UIKit

Incorporare view SwiftUI nelle app UIKit con UIHostingController.

UIHostingController: SwiftUI dentro UIKit è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.

Che cos'è UIHostingController?

UIHostingController è un view controller di UIKit che ospita una gerarchia di viste SwiftUI.

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

Incorporamento in un UIViewController

Aggiunga un hosting controller come view controller figlio usando l'API standard per i view controller figli.

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 hosting controller

Fissi la view dell'hosting controller con Auto Layout per integrarla in un layout 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)
])

Aggiornamento della vista radice

Aggiorni la vista SwiftUI ospitata impostando rootView sull'hosting controller.

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

Presentazione modale

Presenti un hosting controller come qualsiasi modale UIKit, aggiungendo contenuti SwiftUI a una presentazione UIKit.

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

Push nello stack di navigazione

Esegua il push di un hosting controller su un UINavigationController per raggiungere contenuti SwiftUI da UIKit.

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

Condivisione dei dati tramite ObservableObject

Passi un ObservableObject condiviso nell'environment della vista SwiftUI per ottenere un flusso di dati bidirezionale.

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

Dimensionamento dell'hosting controller

Usi sizeThatFits per calcolare la dimensione intrinseca dei contenuti SwiftUI da incorporare nelle scroll view.

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

Aspetto e stile

Imposti overrideUserInterfaceStyle sull'hosting controller per controllare indipendentemente la modalità chiara o scura.

hostingVC.overrideUserInterfaceStyle = .dark

Configurazione dell'app basata sulle scene

In un'app che usa principalmente UIKit, può sostituire il view controller radice con un hosting controller per eseguire la migrazione in modo incrementale.

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()
}

Casi d'uso

UIHostingController è ideale per una migrazione incrementale: mantenga la navigazione UIKit incorporando nuove schermate di funzionalità SwiftUI.

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

Verifica rapida

Quale classe UIKit si usa per incorporare una vista SwiftUI nella gerarchia dei view controller UIKit?

Riepilogo della lezione

UIHostingController(rootView:) collega SwiftUI a UIKit. Lo aggiunga come view controller figlio con vincoli Auto Layout, oppure lo presenti o esegua il push. Lo aggiorni tramite rootView. Condivida i dati tramite ObservableObject e environmentObject.

Domande Frequenti

La lezione «UIHostingController: SwiftUI dentro UIKit» è gratuita?

Sì — il testo completo di «UIHostingController: SwiftUI dentro UIKit» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.

Cosa imparerò in «UIHostingController: SwiftUI dentro UIKit»?

Incorporare view SwiftUI nelle app UIKit con UIHostingController. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Swift Academy?

Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «UIHostingController: SwiftUI dentro UIKit»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Swift Academy?

Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. UIViewRepresentable: racchiudere le view UIKit
  2. Pattern Coordinator per la comunicazione con i delegate
  3. UIViewControllerRepresentable
  4. UIHostingController: SwiftUI dentro UIKit
← Torna a Swift Academy