计算未知NSString的CGSize

时间:2013-07-03 10:27:45

标签: ios objective-c nsstring fontmetrics sizewithfont

如何找到未知字符串的CGSize,我知道它的最大字符数但不是确切的字符串?

我知道您可以使用" sizeWithFont"来计算特定NSString的大小。 NSString上的方法如下:

UIFont * font = [UIFont systemFontOfSize:15];
CGSize stringSize = [aString sizeWithFont:font]; 
CGFloat width = stringSize.width;

但是当你不知道确切的字符串并且只知道字符串可能包含的字符数时,我正在寻找一种方法。

2 个答案:

答案 0 :(得分:0)

我认为没有办法。

为什么需要传递字符串?

  • 因为它的字母消耗宽度,并且根据所选字体进行更改。比如,'lll'将覆盖比'HHH'更小的空间,尽管两者都包含相同数量的字母(这里是3)。因此必须提供字符。

解决此问题

  • 提供一个消耗最大宽度的字母,如H,Q,W等,并传递多少个字母。例如:如果您需要5个字母的宽度,请执行如下语句:
UIFont * font = [UIFont systemFontOfSize:15];

CGSize stringSize = [@"WWWWW"sizeWithFont:font]; // 5 times 'W'

CGFloat width = stringSize.width;

现在您将获得最大宽度概率,这允许所有其他字符串概率。

这只是一种解决方法,我认为iOS SDK中没有确切的解决方案。

答案 1 :(得分:0)

只有在您不知道字符串的确切字符时才能估算CGSize。 最糟糕的估计可能是用“M”或“W”字符填充整个字符串,因为我认为这应该是大多数字体中最宽的字符:

int charCount = 10;
NSString *testString = @"";
for (int i = 0; i < charCount; i++) {
    testString = [testString stringByAppendingString:@"M"];
}

您还可以通过添加“i”-chars来估算最佳情况。您应该进行大量测试,以找到在大多数情况下效果最佳的角色。