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

On iOS 15, the UIHostingController is adding some weird extra padding to its hosting SwiftUI view (_UIHostingView)

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

见下方截图(蓝色 = 额外 space,红色 = 实际视图):

有人知道为什么会这样吗?

我已经报告了这个错误,Apple 伙计们:FB9641883

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

我试图找出为什么会发生这种情况,但运气不佳。我发现修复它的唯一方法是在 UIHostingController:

的子类中为其固有内容大小设置高度约束
    private var heightConstraint: NSLayoutConstraint?

    override open func viewDidLoad() {
        super.viewDidLoad()
        if #available(iOS 15.0, *) {
            heightConstraint = view.heightAnchor.constraint(equalToConstant: view.intrinsicContentSize.height)
            NSLayoutConstraint.activate([
                heightConstraint!,
            ])
        }
    }

    override open func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        heightConstraint?.constant = view.intrinsicContentSize.height
    }

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

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

        view.setNeedsUpdateConstraints()
    }
}

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