我在 SwiftUI 中遇到问题,我有一个容器,然后是容器中包含文本的视图。我需要将文本换行并让容器扩展到它的高度。这是一个非常简化的版本:
struct ContentView: View {
var body: some View {
ScrollView(.horizontal, showsIndicators: false) {
HStack(alignment: .top, spacing: 10) {
VStack {
Text("hellloooo")
.frame(width: 151.5, height: 202)
Text("klfaskjfkaslfjaslkfjklfaskjfk")
.frame(maxWidth: 151.5, alignment: .leading)
.lineLimit(3)
}
}
.background(Color.red)
.padding(.horizontal)
}
}
}
像这样,我得到以下内容:
我曾想设置行限制与换行文本而不是像这样截断它。我尝试添加以下修饰符:
.fixedSize(horizontal: false, vertical: true)
这会阻止文本被截断,但容器视图不会展开:
我还尝试在 VStack 的末尾添加一个
Spacer()
。这确实推动了内容,但是,当我只有 1 行文本时,Spacer 仍在视图末尾添加额外的空间,这是我不想要的。我该如何解决这个问题?
这一行似乎是问题所在:
.frame(maxWidth: 151.5, alignment: .leading)
如果我理解您的需要,当使用宽度代替时,视图会按需工作:
.frame(width: 151.5, alignment: .leading)
结果:
完整的代码(你的原始代码与 fixedSize() 和那个小的变化):
struct ContentView: View {
var body: some View {
ScrollView(.horizontal, showsIndicators: false) {
HStack(alignment: .top, spacing: 10) {
VStack {
Text("hellloooo")
.frame(width: 151.5, height: 202)
Text("klfaskjfkaslfjaslkfjklfaskjfk")
.frame(width: 151.5, alignment: .leading)
.lineLimit(3)
.fixedSize(horizontal: false, vertical: true)
}
}
.background(Color.red)
.padding(.horizontal)
}
}
}