实际上它对齐正确,为每个添加背景Text
,您会发现框架Text
对齐正确
但是为了解决您正在寻找的案例,我通过一些计算为您做了一个 hack 。
结果:
1)两者的对齐Text
- 将它们合二为一
HStack
,与alignment: .firstTextBaseline
baselineOffset
然后通过添加一个with来播放第二个文本(bigFont.capHeight - smallFont.capHeight)
您可以了解有关字体的更多信息,但您需要的主要信息是:
所以你的代码将是:
HStack(alignment: .firstTextBaseline) {
Text("14°")
.font(Font(bigFont))
.background(Color.blue)
Text("86%")
.font(Font(smallFont))
.baselineOffset((bigFont.capHeight - smallFont.capHeight))
.background(Color.yellow)
Spacer()
}
2)将图像与文本对齐:
- 通过添加一个等于的填充
bigFont.lineHeight-bigFont.ascender
(回到顶部的图片,看看我是如何计算的)
最后的代码:
struct ContentView: View {
@State var pickerSelection = ""
let bigFont = UIFont.systemFont(ofSize: 50)
let smallFont = UIFont.systemFont(ofSize: 15)
var body: some View {
HStack(alignment:.top) {
Image(systemName: "cloud.drizzle.fill")
.background(Color.red)
.padding(.top, bigFont.lineHeight-bigFont.ascender)
HStack(alignment: .firstTextBaseline) {
Text("14°")
.font(Font(bigFont))
.background(Color.blue)
Text("86%")
.font(Font(smallFont))
.baselineOffset((bigFont.capHeight - smallFont.capHeight))
.background(Color.yellow)
Spacer()
}
}
}
}
PS:我添加了背景以向您展示每个视图的真实框架