我正在尝试在UIView上布局文本。
(黄色区域是具有背景颜色的UILabel的框架)。
当我使用sizeWithFont时,我得到了这个,它在字母上面有一个非常大的空间:
当我使用font.pointSize
时,我得到的是“i”,这很好 -
BUT 当我将它用于“p”时,我得到了精确的高度,但字母在底部绘制并裁剪。
**我怎样才能让字形只在框架中居中? **
由于
沙尼
答案 0 :(得分:20)
UIFont
上有很多属性可以帮助解决这种情况:
pointSize
ascender
descender
capHeight
xHeight
lineHeight
答案 1 :(得分:3)
您可以使用“printscreen”类型的函数将UILabel
转换为UIImage
,然后逐个检查像素(例如:How to get pixel data from a UIImage (Cocoa Touch) or CGImage (Core Graphics)?)并'计算'左上方右下方。
答案 2 :(得分:2)
尝试通过font.ascender - font.capHeight向上移动文本。缩小UILabel的高度可能会削减其内容,因此最好调整标签的y位置,而不是调整大小。
以下代码示例解释了我使用的计算:
// in UILabel subclass:
- (CGFloat) topPadding
{
// ascender = height from baseline to top of label (including top padding)
// capHeight = height of a capital letter = ascender - top padding
// -> top padding = ascender - capHeight
return self.font.ascender - self.font.capHeight;
}