Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSString sizeWithFont,问题_Iphone_Objective C_Ios_Ios5_Ios4 - Fatal编程技术网

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的那些日子,在那里,这些像素宽度