doe*_*ema 4 gridview android-gravity swiftui lazyvgrid lazyhgrid
如何使图像和文本对齐方式与 SwiftUI LazyVGrid 中的其他 3 个对齐方式相同,如下图所示?
我认为问题是如果文本是多行的,如何使文本从顶部开始。在Android中,我可以使用gravity =“top | center”,但在SwiftUI中,我使用.multilineTextAlignment(.center),但结果并不像我预期的那样。
这是我在代码中尝试的内容:
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)
Run Code Online (Sandbox Code Playgroud)
对于Texts 框架,您需要:
maxHeight为.infinity,这样它也可以垂直扩展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)
}
Run Code Online (Sandbox Code Playgroud)
结果:
| 归档时间: |
|
| 查看次数: |
1979 次 |
| 最近记录: |