在 iOS 15 上,UIHostingController 向其托管 SwiftUI 视图 (_UIHostingView) 添加了一些奇怪的额外填充

Lui*_*rbe 19 swiftui uihostingcontroller ios15

更新:2022-09-26

\n

此问题已在 iOS 16 上修复。尽管即使使用 iOS 16 SDK 编译项目,该问题在 iOS 15 上仍然存在。

\n

原问题:

\n

在 iOS 15 上,正在UIHostingController向其托管 SwiftUI 视图添加一些奇怪的额外填充 ( _UIHostingView)。

\n

请参见下面的屏幕截图(蓝色=额外空间,红色=实际视图\xe2\x80\x99s):

\n

在此输入图像描述

\n

有谁知道为什么会发生这种情况?

\n

我已经报告了这个错误,Apple 人员:FB9641883

\n

PD:我有一个工作项目重现了我附加到反馈助手问题的问题。如果有人想要的话我也可以上传。

\n

Seb*_*ski 27

我发现UIHostingController如下子类化通过额外的填充解决了这个问题:

final class HostingController<Content: View>: UIHostingController<Content> {
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        view.setNeedsUpdateConstraints()
    }
}
Run Code Online (Sandbox Code Playgroud)

它还修复了当 SwiftUI 视图更改大小时 UIHostingController 无法正确调整大小的问题。

  • 这对我不起作用 (4认同)
  • 在 viewDidLayoutSubviews 中修改视图的布局从来都不是一个好主意,你很容易就会陷入无限循环 (2认同)