设置行限制时编辑文本

问题描述 投票:0回答:1

我在 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 仍在视图末尾添加额外的空间,这是我不想要的。我该如何解决这个问题?

swift swiftui word-wrap truncate
1个回答
0
投票

这一行似乎是问题所在:

.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)
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.