【问题标题】:Does UIHostingController have to be in the view controller hierarchy?UIHostingController 是否必须在视图控制器层次结构中?
【发布时间】:2021-07-10 20:10:53
【问题描述】:

我想在我的基于 UIKit 的 UI 中嵌入一些 SwiftUI,不幸的是 Apple 没有提供 UIHostingView,只有 UIHostingController。我可以或多或少地忽略该控制器并只使用它的视图,还是我真的需要将它添加为子视图控制器?如果我不这样做会怎样?

问题是在某些情况下找到父视图控制器可能很困难。 UIView 本身对视图控制器一无所知,所以我必须想出自己的方法来跟踪哪个是“当前”视图控制器。除非确实有必要,否则我宁愿不这样做。

到目前为止,在我的实验中,它在不添加 UIHostingController 作为孩子的情况下运行良好。设备旋转得到适当处理,SwiftUI 的暗模式覆盖 (.colorScheme()) 甚至可以通过嵌入工作。

【问题讨论】:

    标签: swiftui uihostingcontroller


    【解决方案1】:

    使用UIHostingController(rootView:),您只需传入一个SwiftUI View

    您可以通过以下方式将其视为UIView

    let myView = UIHostingController(rootView: Text("Hello world!")).view
    

    然后将其添加为子视图例如:

    let parent = UIView()
    parent.addSubview(myView)
    

    【讨论】:

    • 问题是,忽略视图控制器的后果是什么? AppKit 有NSHostingView 而 UIKit 没有 `UIHostingView' 大概是有原因的。但为什么会这样并不是很明显。
    • @Uncommon 有趣的问题。我偶然发现了this link,我不确定他们为什么这样做addChild(controller)。我直接使用了UIView,我没有特别看到它不合理使用的原因。可能是因为他们可以访问视图控制器的children,但老实说,我对此不是 100% 确定的。这是一个有趣的观点。我想说的是,如果您只需要视图,这将起作用。如果您有充分的理由,请纠正我!
    猜你喜欢
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2014-11-07
    • 2011-12-30
    • 2020-12-08
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多