Iphone NSString sizeWithFont,问题
如果我试图找出字符串的宽度(以像素为单位)Iphone NSString sizeWithFont,问题,iphone,objective-c,ios,ios5,ios4,Iphone,Objective C,Ios,Ios5,Ios4,如果我试图找出字符串的宽度(以像素为单位) CGSize sz = [@"Test text to hilight without new line for testing" sizeWithFont:CGTextLabel.font]; NSLog(NSStringFromCGSize(sz)); 输出为:CoregraphicsDrawing[3306:f803]{339,21} 如果我尝试按空格分隔字符串@“并循环它以增加每个单词的宽度+每个单词后面的空格宽度,则总宽度是不同的 Cor
CGSize sz = [@"Test text to hilight without new line for testing" sizeWithFont:CGTextLabel.font];
NSLog(NSStringFromCGSize(sz));
输出为:CoregraphicsDrawing[3306:f803]{339,21}
如果我尝试按空格分隔字符串@“并循环它以增加每个单词的宽度+每个单词后面的空格宽度,则总宽度是不同的CoregraphicsDrawing[3306:f803]351.000000 请检查我逐字计算宽度的代码:
str=@“在没有新行的情况下将文本测试为高亮显示”;
self.words=[NSMutableArray arrayWithArray:[str ComponentsParatedByString:@”“];
CGFloat pos=0;
[self.rects addObject:[NSValue-valueWithCGPoint:CGPointMake(0,0)];
for(int i=0;i<[self.words count];i++)
{
NSString*w=[self.words objectAtIndex:i];
新南威尔士州;
CGSize sz=[w sizeWithFont:CGTextLabel.font];
pos+=sz.宽度;
pos+=[@”sizeWithFont:CGTextLabel.font]。宽度;
如果(i!=[self.words count]-1)
{
[self.rects addObject:[NSValue-valueWithCGPoint:CGPointMake(pos,0)];
}
否则{
NSLog(@“%f”,pos);//此处打印实际计算的宽度。
}
}
如果有人能提出解决方案,我将非常感谢。在做了一些测试之后,它看起来就像调用
sizeWithFont:
,只需要一个空格,增加了额外的空间,并且不会将其视为字符之间的空格。这就是我尝试使用systemFont
时发生的情况
所以每次使用[@“sizeWithFont:CGTextLabel.font].width代码>您将无法获得字符之间的空格大小,但很可能在结尾处还有一些额外的位。我通过以下方式注意到了这一点:
CGSize size1 = [@"Hello There" sizeWithFont:[UIFont systemFontOfSize:12]];
CGSize size2 = [@" " sizeWithFont:[UIFont systemFontOfSize:12]];
CGSize size3 = [@"Hello" sizeWithFont:[UIFont systemFontOfSize:12]];
CGSize size4 = [@"There" sizeWithFont:[UIFont systemFontOfSize:12]];
CGSize size5 = [@"Hello There Hello There" sizeWithFont:[UIFont systemFontOfSize:12]];
NSLog(NSStringFromCGSize(size1));
NSLog(NSStringFromCGSize(size2));
NSLog(NSStringFromCGSize(size3));
NSLog(NSStringFromCGSize(size4));
NSLog(NSStringFromCGSize(size5));
我从控制台返回了这个:
2012-07-17 10:57:40.513 TesterProject[62378:f803] {63, 15}
2012-07-17 10:57:40.514 TesterProject[62378:f803] {4, 15}
2012-07-17 10:57:40.514 TesterProject[62378:f803] {28, 15}
2012-07-17 10:57:40.514 TesterProject[62378:f803] {32, 15}
2012-07-17 10:57:40.514 TesterProject[62378:f803] {128, 15}
因此,仅空间就返回4“像素”的宽度。“你好”返回28,“有”返回32。所以你们一起会发现它是64,但我得到了63。所以这里的空间是3,而不是4。同样,当我做“你好,你好,你好”,你会认为我会得到63*2+4,空间=130。相反,我得到了63*2+2。因此,本例中的空间实际上大部分时间只占用2-3个“像素”,但如果我调用sizeWithFont:
只需@“
我就得到4个
字体并不总是为每个空间创建完全相同的间距,这可能就是您遇到问题的原因。通过测试,我得到的空间是在不同的单词组合中添加2、3甚至4个“像素”。我认为只有当你有完整的短语时,才应该使用这个电话,要把它全部加在一起太难了。是否有其他方法来创建您正在寻找的功能
编辑:我还发现,只需将两个单词放在一起,就可以得到与单独使用不同的结果:
CGSize size = [@"HelloThere" sizeWithFont:[UIFont systemFontOfSize:12]];
返回59,而“Hello”返回28,“There”返回32。在做了一些测试后,它看起来像调用sizeWithFont:
,只使用了一个空格,增加了额外的空间,并且不会将其视为字符之间的空格。这就是我尝试使用systemFont
时发生的情况
所以每次使用[@“sizeWithFont:CGTextLabel.font].width代码>您将无法获得字符之间的空格大小,但很可能在结尾处还有一些额外的位。我通过以下方式注意到了这一点:
CGSize size1 = [@"Hello There" sizeWithFont:[UIFont systemFontOfSize:12]];
CGSize size2 = [@" " sizeWithFont:[UIFont systemFontOfSize:12]];
CGSize size3 = [@"Hello" sizeWithFont:[UIFont systemFontOfSize:12]];
CGSize size4 = [@"There" sizeWithFont:[UIFont systemFontOfSize:12]];
CGSize size5 = [@"Hello There Hello There" sizeWithFont:[UIFont systemFontOfSize:12]];
NSLog(NSStringFromCGSize(size1));
NSLog(NSStringFromCGSize(size2));
NSLog(NSStringFromCGSize(size3));
NSLog(NSStringFromCGSize(size4));
NSLog(NSStringFromCGSize(size5));
我从控制台返回了这个:
2012-07-17 10:57:40.513 TesterProject[62378:f803] {63, 15}
2012-07-17 10:57:40.514 TesterProject[62378:f803] {4, 15}
2012-07-17 10:57:40.514 TesterProject[62378:f803] {28, 15}
2012-07-17 10:57:40.514 TesterProject[62378:f803] {32, 15}
2012-07-17 10:57:40.514 TesterProject[62378:f803] {128, 15}
因此,仅空间就返回4“像素”的宽度。“你好”返回28,“有”返回32。所以你们一起会发现它是64,但我得到了63。所以这里的空间是3,而不是4。同样,当我做“你好,你好,你好”,你会认为我会得到63*2+4,空间=130。相反,我得到了63*2+2。因此,本例中的空间实际上大部分时间只占用2-3个“像素”,但如果我调用sizeWithFont:
只需@“
我就得到4个
字体并不总是为每个空间创建完全相同的间距,这可能就是您遇到问题的原因。通过测试,我得到的空间是在不同的单词组合中添加2、3甚至4个“像素”。我认为只有当你有完整的短语时,才应该使用这个电话,要把它全部加在一起太难了。是否有其他方法来创建您正在寻找的功能
编辑:我还发现,只需将两个单词放在一起,就可以得到与单独使用不同的结果:
CGSize size = [@"HelloThere" sizeWithFont:[UIFont systemFontOfSize:12]];
返回59,而“Hello”返回28,“There”返回32。我认为您在for循环中的短语末尾添加了一个额外的@”。这可能是您获得更大宽度的原因。谢谢@frowing,但这不是问题所在。空格
是一件棘手的事情,因为空格
大小在单词之间不相同,它的当前大小取决于空格
前后的字母。(尝试深入了解字体的几何图形以了解更多信息。)我认为您在短语末尾的for循环中添加了一个额外的@“”。这可能是您获得更大宽度的原因。谢谢@frowing,但这不是问题所在。空格
是一件棘手的事情,因为空格
大小在单词之间不相同,它的当前大小取决于空格
前后的字母。(尝试深入了解字体的几何图形以获取更多信息。)非常感谢您的回复,贾斯汀。我也有和你提到的一样的数据。实际上,我正在使用coregraphics进行一些低级字符串绘制,并带有一些选择性的文本高亮显示,为此,我将字符串拆分为不同的颜色以覆盖精确的单词,并计算像素位置,我遇到了这个问题。好。。我喜欢使用BREW的那些日子,在那里,这些像素宽度