如何将SwiftUI文本的多行文本对齐方式设置为顶部和中心

4

enter image description here

我该如何使得 SwiftUI 的 LazyVGrid 中的图像和文本对齐方式与下图中的三个相同?
我认为问题在于如何使得多行文本从顶部开始。在 Android 中,我可以使用 gravity="top|center",但是在 SwiftUI 中,我使用 .multilineTextAlignment(.center),但结果不符合我的期望。

enter image description here

这是我刚才在我的代码中尝试的内容:

      LazyVGrid(columns: gridItemLayout, spacing: 0) {
          ForEach((0...7), id: \.self) { i in
               VStack {
                    RemoteImageView(url: vm.listService[i].image_uri)
                        .frame(width: 100, height: 100)
                    Text(vm.listService[i].name)
                        .font(.body)
                        .multilineTextAlignment(.center)
                        .frame(maxWidth: .infinity, alignment: .center)
               }
         }
      }
      .padding(.horizontal, 25.0)
1个回答

8
对于文本框架,您需要执行以下操作:
  1. maxHeight 设置为 .infinity,以便它可以垂直扩展
  2. alignment 设置为 .top,以便其顶部对齐
let names = ["Hi", "Hello world", "Long long text"]

let gridItemLayout = [
   GridItem(.adaptive(minimum: 80))
]

var body: some View {
    
    LazyVGrid(columns: gridItemLayout, spacing: 0) {
        ForEach((0...7), id: \.self) { i in
            VStack {
                Image(systemName: "folder")
                .frame(width: 100, height: 100)
                .background(Color.green)
                Text(names.randomElement() ?? "")
                .font(.body)
                .multilineTextAlignment(.center)
                
                /// here!
                .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top)
            }
        }
    }
    .padding(.horizontal, 25.0)
}

结果:

由图像和文本组成的元素网格。 图像的y位置始终相同,而文本在有多行时向下扩展。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接