感謝,Abhinit,你的答案。
我也在尋找這個,所以我想在這裏發佈你需要應用的準確約束來對齊你喜歡的文本。
此圖片來自Wikipedia顯示了字體的不同大小部分。
所以,有許多方法來對齊取決於是否要對齊到伸高度,蓋的高度,x高度,基線或伸高度的標籤。
比方說,你在帽狀「HELLO」一個label
包含文本,並要與viewAbove
對準瓶蓋高度,並與viewBelow
對齊基線。
你會做:
let font = label.font
let ascenderDelta = font.ascender - font.capHeight
LayoutHelper()
.addViews([
"label":label, "viewAbove":viewAbove, "viewBelow":viewBelow
])
.withMetrics(["ascenderDelta":ascenderDelta])
.addConstraints([
// -- Here the constraints to align to cap height --
"X:label.top == viewAbove.bottom - ascenderDelta",
"X:label.baseline == viewBelow.top",
...other constraints...
])
注:在例子中,我用我的實用工具類LayoutHelper,但我希望這個想法是清楚的。
關於「自動對齊」標籤:
我會考慮讓「智能」標籤,調整到適當的線取決於它是否包含伸,伸,瓶蓋等
您可以使用drawTextInRect
(如here,但例如使用insets = {-ascenderDelta, 0, font.descender, 0}
)中的負插入來執行此操作。但是,如果你有的話,那會使任何上升/下降的作物出現。我寧願在沒有裁剪任何可能的上身的情況下對齊到大寫字母。
不僅大寫或小寫,而且在小寫的情況下是否使用包含上部或下部的字符。重寫'setText'是一個很好的主意。麻煩的是,如果我想在「oyyyo」的情況下調整上升,我不能那樣做。如果我調整標籤的高度,那上行會保持在頂部,不是嗎? – Luke
我認爲UIBaselineAdjustmentAlignBaselines可能有幫助。也就是說,這些正是我比UILabel和UIFont類更願意考慮CoreText的原因。 – Abhinit