如何在预览中让我的SwiftUI UIViewRepresentable尊重nativeContentSize?

kne*_*llr 7 xcode intrinsic-content-size swiftui xcode11

当我在SwiftUI中创建视图并在Xcode预览中使用渲染时PreviewLayout.sizeThatFits,预览会根据其内容调整其大小。当我使用导入UIKIt视图时UIViewRepresentable,它会显示完整的设备尺寸框架。

有没有一种方法,使SwiftUI尊重intrinsicContentSizeUIView子类?

struct Label: UIViewRepresentable {

    func makeUIView(context: UIViewRepresentableContext<Label>) -> UILabel {
        return UILabel()
    }

    func updateUIView(_ uiView: UILabel, context: UIViewRepresentableContext<Label>) {
        uiView.text = "Some text"
    }
}

#if DEBUG
struct Label_Previews: PreviewProvider {
    static var previews: some View {
        Group {
            Label().previewLayout(.sizeThatFits)
        }
    }
}
#endif
Run Code Online (Sandbox Code Playgroud)

小智 25

将以下内容添加到您的 updateUIView 函数中:

uiView.setContentHuggingPriority(.defaultHigh, for: .vertical)
uiView.setContentHuggingPriority(.defaultHigh, for: .horizontal)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这非常有帮助。事实证明,在创建视图后在“makeUIView”中设置 contentHuggingPriorities 时,它也适用。对我来说感觉更干净一些,因为这只需要配置一次,而不是每次更新视图时...... (3认同)