问题描述
我想在基于 UIKit 的 UI 中嵌入一些 SwiftUI,不幸的是 Apple 不提供 UIHostingView
,仅提供 UIHostingController
。我可以或多或少地忽略该控制器而只使用它的视图,还是我真的需要将它添加为子视图控制器?如果我不这样做会怎样?
问题是在某些情况下很难找到父视图控制器。 UIView
本身对视图控制器一无所知,因此我必须想出自己的方法来跟踪哪个是“当前”视图控制器。除非确实有必要,否则我宁愿不这样做。
到目前为止,在我的实验中,它在不添加 UIHostingController
的情况下运行良好。设备旋转得到适当处理,SwiftUI 的暗模式覆盖 (.colorScheme()
) 甚至通过嵌入起作用。
解决方法
使用 UIHostingController(rootView:)
,您只需传入 SwiftUI View
。
您可以通过以下方式将其视为 UIView
:
let myView = UIHostingController(rootView: Text("Hello world!")).view
然后将其添加为子视图例如:
let parent = UIView()
parent.addSubview(myView)