使用UIFont时处理点或像素

时间:2011-04-15 21:10:30

标签: ios uifont

我试图在我的drawRect:(CGRect)方法中将字符串放在CGRect的垂直中心。

CGRect有这个尺寸:

CGRect rect = CGRectMake(0.0f, 0.0f, rectWidth, rectHeight);

要绘制字符串以使其居中,我首先尝试了这个:

CGFloat diffHeightRectAndFont = rectHeight - font.capHeight;
[str drawAtPoint:CGPointMake(0.0f, diffHeightRectAndFont * 0.5f) withFont:font];

我首先假设我会发现我的矩形和字体之间的高度差异,然后将字体偏移一半这个高度应该在“最佳位置”给出y位置。

但是,capHeight以点为单位,rectHeight以像素为单位,因此这种解决方案适用于12-15大小范围内的字体。之后差异开始将字符串放在矩形之外。

我重复了几次,正确定位字符串的唯一方法就是这个'hack',这是有效的,但不会对代码的可读性产生奇迹:

CGFloat diffHeightRectAndFont = rectHeight - [[NSString stringWithString:@"F"] sizeWithFont:font].height;

是否有更直接的方式使用特定字体获取大写字母的像素高度?

提前谢谢你:)

1 个答案:

答案 0 :(得分:1)

我知道它有点晚了。但是我的回答是我的帮助。

NSString有一个sizeWithFont:方法(记录为here),我认为可以用于此。它返回一个CGSize结构,因此您可以执行与以下内容类似的操作来查找标签内文本的高度。

CGSize textSize = [[label text] sizeWithFont:[label font]];

CGFloat heightOfStringWithSpecifiedFont = textSize.height;

UILabel有一个字体属性,您可以使用它来动态获取标签的字体详细信息,如上所述。

希望这会有所帮助:)