我需要在視圖中顯示一個 SF 符號(影像)和一個文本(作為標題)。由于文本可能很長,我希望它在第二行的影像下方傳遞。
預期結果(幾乎!):
我首先嘗試了HStack
影像和文本。但文本不會出現在影像下方:第二行以左“填充”開頭(對應于左影像空間)。
所以我做了這個代碼(以獲得以前的螢屏截圖):
HStack(alignment:.top) {
Text(Image(systemName: "circle.hexagongrid.circle"))
.font(.caption)
.foregroundColor(.pink)
Text("A long text as example")
.font(.title2).bold()
.foregroundColor(.pink)
}
.frame(width:140)
但我想將影像與第一行的中心對齊。影像的中心應垂直位于 頂部A
和底部的中間g
。
重要的是,我的第二條(和更多)線在我的影像下方經過。而且我不想要更大的影像字體。
uj5u.com熱心網友回復:
我不知道您是否可以在所有情況下強制影像自動居中,但是您可以.baselineOffset()
向文本中的影像添加修飾符以將影像向上移動固定量。例如:
Text(Image(systemName: "circle.hexagongrid.circle"))
.font(.caption)
.foregroundColor(.pink)
.baselineOffset(3.0)
Text("A long text as example")
.font(.title2).bold()
.foregroundColor(.pink)
一旦您找到了默認文本大小的正確偏移量,您就可以通過使偏移大小相對于基本大小來適應可訪問性變化,例如
Struct MyView: View {
@ScaledMetric(relativeTo: .title2) var baselineOffset: CGFloat = 3.0
// and in your body…
.baselineOffset(baselineOffset)
uj5u.com熱心網友回復:
首先,您可以洗掉 ,HStack
因為它是多余的。你可以用括號替換它()
來封裝 new Text
,這樣你就可以使用更多的修飾符來設定寬度。
主要的解決方案是使用
獎勵:您可以foregroundColor(.pink)
在Text
s 組合后移動您的修飾符,因此您不必復制它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/398983.html
上一篇:Lumen8-在測驗中使用Faker會導致InvalidArgumentException:Unknownformat"name"