0Pricing
Swift Academy · Lekcja

UIHostingController: SwiftUI wewnątrz UIKit

Osadzanie widoków SwiftUI w aplikacjach UIKit za pomocą UIHostingController.

UIHostingController: SwiftUI wewnątrz UIKit to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Czym jest UIHostingController?

UIHostingController to kontroler widoku UIKit, który osadza hierarchię widoków SwiftUI.

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

Osadzanie w UIViewController

Należy dodać kontroler hostujący jako podrzędny kontroler widoku, korzystając ze standardowego API podrzędnych kontrolerów widoku.

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 z kontrolerem hostującym

Należy przypiąć widok kontrolera hostującego za pomocą Auto Layout, aby zintegrować go z układem 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)
])

Aktualizowanie widoku głównego

Aby zaktualizować osadzony widok SwiftUI, należy ustawić rootView kontrolera hostującego.

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

Prezentowanie modalne

Należy prezentować kontroler hostujący tak jak każdy modal UIKit, uzyskując zawartość SwiftUI w prezentacji UIKit.

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

Umieszczanie na stosie nawigacji

Należy umieścić kontroler hostujący na stosie UINavigationController, aby przejść z UIKit do zawartości SwiftUI.

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

Udostępnianie danych przez ObservableObject

Należy przekazać współdzielony ObservableObject do środowiska widoku SwiftUI, aby zapewnić dwukierunkowy przepływ danych.

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

Ustalanie rozmiaru kontrolera hostującego

Należy użyć sizeThatFits, aby obliczyć naturalny rozmiar zawartości SwiftUI podczas osadzania jej w widokach przewijanych.

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

Wygląd i styl

Należy ustawić overrideUserInterfaceStyle kontrolera hostującego, aby niezależnie sterować trybem ciemnym i jasnym.

hostingVC.overrideUserInterfaceStyle = .dark

Konfiguracja aplikacji oparta na scenach

W aplikacji opartej przede wszystkim na UIKit można zastąpić główny kontroler widoku kontrolerem hostującym i przeprowadzić stopniową migrację.

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

Przypadki użycia

UIHostingController doskonale nadaje się do stopniowej migracji: można zachować nawigację UIKit, osadzając nowe ekrany funkcji w SwiftUI.

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

Szybkie sprawdzenie

Jakiej klasy UIKit należy użyć, aby osadzić widok SwiftUI w hierarchii kontrolerów widoku UIKit?

Podsumowanie lekcji

UIHostingController(rootView:) łączy SwiftUI z UIKit. Należy dodać go jako podrzędny kontroler widoku, używając ograniczeń Auto Layout, albo zaprezentować go lub umieścić na stosie nawigacji. Aktualizację należy wykonywać za pomocą rootView. Dane można udostępniać przez ObservableObject i environmentObject.

Często zadawane pytania

Czy lekcja „UIHostingController: SwiftUI wewnątrz UIKit” jest bezpłatna?

Tak — pełny tekst „UIHostingController: SwiftUI wewnątrz UIKit” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „UIHostingController: SwiftUI wewnątrz UIKit”?

Osadzanie widoków SwiftUI w aplikacjach UIKit za pomocą UIHostingController. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „UIHostingController: SwiftUI wewnątrz UIKit”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. UIViewRepresentable: opakowywanie widoków UIKit
  2. Wzorzec Coordinator do komunikacji z delegatem
  3. UIViewControllerRepresentable
  4. UIHostingController: SwiftUI wewnątrz UIKit
← Powrót do Swift Academy