iOS - 获取字母的“真实”高度

时间:2012-01-26 15:11:11

标签: ios uifont

我正在尝试在UIView上布局文本。

(黄色区域是具有背景颜色的UILabel的框架)。

当我使用sizeWithFont时,我得到了这个,它在字母上面有一个非常大的空间:

p with sizeWithFont

当我使用font.pointSize时,我得到的是“i”,这很好 -

p with font.pointSize

BUT 当我将它用于“p”时,我得到了精确的高度,但字母在底部绘制并裁剪。

p with font.pointSize

**我怎样才能让字形只在框架中居中? **

由于

沙尼

3 个答案:

答案 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;
}