Ios 使用UIFont时处理点或像素

Ios 使用UIFont时处理点或像素,ios,uifont,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, diffHeightRe

我试图在我的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和font之间的高度差,然后将字体偏移这个高度的一半应该会在“最佳点”中给出一个y位置

然而,capHeight是以点为单位的,rect height是以像素为单位的,因此这种解决方案适用于大小范围为12-15的字体。之后,差异开始将字符串定位在rect之外

我对此进行了几次讨论,结果证明,保持字符串正确位置的唯一方法是“hack”,它是有效的,但不会对代码的可读性产生任何影响:

CGFloat diffHeightRectAndFont = rectHeight - [[NSString stringWithString:@"F"] sizeWithFont:font].height;
是否有更直接的方法使用特定字体获取大写字母的像素高度?


提前谢谢:)

我知道有点晚了。但不管怎样,我的回答还是帮助了别人

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

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

CGFloat heightOfStringWithSpecifiedFont=textSize.height

UILabel有一个字体属性,您可以使用该属性动态获取标签的字体详细信息,就像我在上面所做的那样


希望这有帮助:)

我知道有点晚了。但不管怎样,我的回答还是帮助了别人

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

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

CGFloat heightOfStringWithSpecifiedFont=textSize.height

UILabel有一个字体属性,您可以使用该属性动态获取标签的字体详细信息,就像我在上面所做的那样

希望这有帮助:)