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

时间:2019-06-19 10:02:04

标签: xcode swiftui xcode11 intrinsic-content-size

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

是否有一种方法可以使SwiftUI尊重intrinsicContentSize子类的UIView

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

2 个答案:

答案 0 :(得分:1)

您还可以从 SwiftUI 端限制 UIViewRepresentable 的大小。

为此,您可以使用 fixedSize:

struct Label_Previews: PreviewProvider {
    static var previews: some View {
        Label()
            .fixedSize()
            .previewLayout(.sizeThatFits)
    }
}

您也可以仅在一维中固定视图大小:

.fixedSize(horizontal: false, vertical: true)

答案 1 :(得分:0)

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

uiView.setContentHuggingPriority(.defaultHigh, for: .vertical)
uiView.setContentHuggingPriority(.defaultHigh, for: .horizontal)