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 versaDimensionamento 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 = sizeAspetto e stile
Imposti overrideUserInterfaceStyle sull'hosting controller per controllare indipendentemente la modalità chiara o scura.
hostingVC.overrideUserInterfaceStyle = .darkConfigurazione 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
- UIViewRepresentable: racchiudere le view UIKit
- Pattern Coordinator per la comunicazione con i delegate
- UIViewControllerRepresentable
- UIHostingController: SwiftUI dentro UIKit