我有 HStack,其中包含两个视图:图像和文本。我想将图像对齐到顶部,但将文本居中对齐到 VerticalAlignment。但是,为文本指定对齐方式 .center 不起作用,它仍然位于顶部。我遗漏了什么吗?
struct SwiftUIView: View {
var body: some View {
HStack(alignment: .top) {
Image(systemName: "star.fill")
.resizable()
.frame(width: 100, height: 100)
.background(.green)
HStack(alignment: .center) {
Text("Text that has dynamic height and should be aligned center")
.background(.pink)
}
}
.background(.gray)
}
}
HStack
如果我理解正确的话,当文本高于图像时,您希望图像与顶部对齐,而当文本短于图像时,您希望文本垂直居中。您不应将文本换行到另一个
HStack
行中,而应frame
在文本周围添加一个。这个(不可见的)框架至少应该与图像(100pt)一样高,并且文本应该
.center
在该框架内对齐。.center
是 的默认值alignment:
,因此写.frame(minHeight: 100)
就足够了。我将其包括在内只是为了清楚发生了什么。当文本比图像短时:
当文本高于图像时:
如果您知道图像的大小,则对齐文本的一种方法是应用。不需要
.alignmentGuide
嵌套:HStack