Skip to content

Instantly share code, notes, and snippets.

@VAnsimov
Last active June 28, 2024 15:17
Show Gist options
  • Save VAnsimov/3d30fc02780c4d6fcea4ba425084ae2c to your computer and use it in GitHub Desktop.
Save VAnsimov/3d30fc02780c4d6fcea4ba425084ae2c to your computer and use it in GitHub Desktop.
SwiftUI View to UIView
import UIKit
import SwiftUI
// SwiftUI
struct SomeView: View {
var body: some View {
Text("Hello World!")
}
}
// UIKit
class RootViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// SwiftUI View -> UIView
let swiftUIView = SomeView()
let uiView = HostingView(rootView: swiftUIView)
}
}
import UIKit
import SwiftUI
class HostingView<T: View>: UIView {
private(set) var hostingController: UIHostingController<T>
var rootView: T {
get { hostingController.rootView }
set { hostingController.rootView = newValue }
}
init(rootView: T, frame: CGRect = .zero) {
hostingController = UIHostingController(rootView: rootView)
super.init(frame: frame)
backgroundColor = .clear
hostingController.view.backgroundColor = backgroundColor
hostingController.view.frame = self.bounds
hostingController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
addSubview(hostingController.view)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment