使用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];
我首先假定这会发现我的rect和字体之间的高度差,然后将字体偏移此高度的一半应在\“ sweet spot \”中给出y位置。 但是,capHeight以磅为单位,rectHeight以像素为单位,因此这种解决方案适用于大小为12-15的字体。之后,差异开始将琴弦放置在rect之外。 我经过了几次,唯一一致地正确定位字符串的唯一方法就是这个\'hack \',这是有效的,但是并没有使代码的可读性令人惊奇:
CGFloat diffheightRectAndFont = rectHeight - [[Nsstring stringWithString:@\"F\"] sizeWithFont:font].height;
是否有使用特定字体获取大写字母的像素高度的更直接方法? 先感谢您:)     

解决方法

我知道有点晚了。但是尽管如此,我的回答还是可以帮助别人。 NSString有一个sizeWithFont:方法(在此处记录),我认为可以用于此目的。它返回一个CGSize结构,因此您可以执行以下操作来查找标签内文本的高度。 CGSize textSize = [[标签文本] sizeWithFont:[标签字体]]; CGFloat heightOfStringWithSpecifiedFont = textSize.height; UILabel具有font属性,您可以使用它来动态获取标签的字体详细信息,就像我在上面所做的那样。 希望这可以帮助 :)