问题描述
|
我试图在我的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属性,您可以使用它来动态获取标签的字体详细信息,就像我在上面所做的那样。
希望这可以帮助 :)