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



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

有没有办法让 SwiftUI 尊重UIView子类的intrinsicContentSize

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

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

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

你也可以从 SwiftUI 端限制UIViewRepresentable的大小。

为此,您可以使用fixedSize

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

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

.fixedSize(horizontal: false, vertical: true)

相关内容

  • 没有找到相关文章

最新更新