13

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

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

在此处输入图像描述

有谁知道为什么会这样?

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

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

4

2 回答 2

9

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

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

        view.setNeedsUpdateConstraints()
    }
}

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

于 2021-09-28T09:39:18.133 回答
0

我试图找出为什么会在没有运气的情况下发生这种情况。我发现修复它的唯一方法是在以下子类中为其内在内容大小设置高度约束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
    }
于 2021-09-21T08:44:22.067 回答