Bre*_*mbs 1 text alignment ios swiftui hstack
我有一个包含多个元素的 HStack,特别是两个Text具有不同字体大小的 s。我希望两个文本都与视图顶部对齐。
HStack(alignment: .top) {\n Image(systemName: "cloud.drizzle.fill")\n Text("14\xc2\xb0")\n .font(.largeTitle)\n Text("86%")\n .font(.callout)\n Spacer()\n}\nRun Code Online (Sandbox Code Playgroud)\n但是,第一个(较大的)Text输出在其他两个下方:
其实对齐是正确的,给每个添加背景Text,你会发现边框对齐Text正确了
但为了解决您正在寻找的案例,我通过进行一些计算为您做了一个破解
\n结果:
\n\nTextHStack,alignment: .firstTextBaselinebaselineOffset然后通过添加with来播放第二个文本(bigFont.capHeight - smallFont.capHeight)您可以了解有关字体的更多信息,但您需要的主要信息是:
\n\n所以你的代码将是:
\n HStack(alignment: .firstTextBaseline) {\n Text("14\xc2\xb0")\n .font(Font(bigFont))\n .background(Color.blue)\n \n Text("86%")\n .font(Font(smallFont))\n .baselineOffset((bigFont.capHeight - smallFont.capHeight))\n .background(Color.yellow)\n Spacer()\n }\nRun Code Online (Sandbox Code Playgroud)\nbigFont.lineHeight-bigFont.ascender(返回到顶部的图片,看看我是如何计算它的)最终代码:
\nstruct ContentView: View {\n @State var pickerSelection = ""\n \n let bigFont = UIFont.systemFont(ofSize: 50)\n let smallFont = UIFont.systemFont(ofSize: 15)\n \n var body: some View {\n HStack(alignment:.top) {\n Image(systemName: "cloud.drizzle.fill")\n .background(Color.red)\n .padding(.top, bigFont.lineHeight-bigFont.ascender)\n HStack(alignment: .firstTextBaseline) {\n Text("14\xc2\xb0")\n .font(Font(bigFont))\n .background(Color.blue)\n \n Text("86%")\n .font(Font(smallFont))\n .baselineOffset((bigFont.capHeight - smallFont.capHeight))\n .background(Color.yellow)\n Spacer()\n }\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\nPS:我添加了背景来向您展示每个视图的真实框架
\n| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |