SwiftUI中如何让Image尺寸适配相邻Text的大小?
SwiftUI 让 Image 自动适配 Text 尺寸
我写了下面这段SwiftUI代码,用HStack嵌套了Image和Text:
HStack { Image("image") .resizable() .scaledToFit() Text("Abc") .background(Color.red) Spacer() } .background(Color.green)
原本希望Image能自动适配Text的大小,但实际运行后,Image仍保持原始大尺寸,布局效果如下:
.---------------HStack------------------ | .-----------. | | | .-----. | | Image | | Abc | | | | `-----' | `-----------' `---------------------------------------
解决方法1:简单约束Image高度
给Image添加frame(maxHeight: .infinity),让它的高度填充HStack的可用空间,而HStack的高度会由Text自动决定,再配合scaledToFit()保持图片比例:
HStack(alignment: .center) { Image("image") .resizable() .scaledToFit() .frame(maxHeight: .infinity) Text("Abc") .background(Color.red) Spacer() } .background(Color.green)
解决方法2:精确匹配Text高度
如果需要更精准地让Image高度和Text完全一致,可以用GeometryReader读取Text的实际高度,再赋值给Image:
@State private var textHeight: CGFloat = 0 HStack(alignment: .center) { Image("image") .resizable() .scaledToFit() .frame(height: textHeight) Text("Abc") .background(Color.red) .background( GeometryReader { proxy in Color.clear .onAppear { textHeight = proxy.size.height } } ) Spacer() } .background(Color.green)
内容的提问来源于stack exchange,提问作者Jonathan Mason
相关产品推荐
相关产品推荐

