当我在 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)