Thanks, Abhinit,为您解答。
我也在寻找这个,所以我想在这里发布您需要应用的确切约束来根据您的喜好对齐文本。
这张图片来自维基百科显示字体的不同大小部分。
因此,对齐标签的方法有很多种,具体取决于您是否想要对齐上升高度、大写高度、x 高度、基线或下降高度。
假设你有一个label
包含像“HELLO”这样的大写文本并且您想要与其对齐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...
])
注意:在示例中我使用的是我的实用程序类布局助手,但我希望这个想法是清楚的。
关于“自动对齐”标签:
我会考虑制作一个“智能”标签,根据它是否包含下降部分、上升部分、大写字母等来调整到适当的行。
您可以使用负插入来做到这一点drawTextInRect
(like here但是,例如,使用insets = {-ascenderDelta, 0, font.descender, 0}
)。但这会裁剪任何上升/下降部分,以防万一。我更喜欢与大写字母对齐而不裁剪任何可能的上升部分。