我试图在我的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;
是否有更直接的方式使用特定字体获取大写字母的像素高度?
提前谢谢你:)
答案 0 :(得分:1)
我知道它有点晚了。但是我的回答是我的帮助。
NSString有一个sizeWithFont:方法(记录为here),我认为可以用于此。它返回一个CGSize结构,因此您可以执行与以下内容类似的操作来查找标签内文本的高度。
CGSize textSize = [[label text] sizeWithFont:[label font]];
CGFloat heightOfStringWithSpecifiedFont = textSize.height;
UILabel有一个字体属性,您可以使用它来动态获取标签的字体详细信息,如上所述。
希望这会有所帮助:)