0

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

我知道您可以使用 NSString 上的“sizeWithFont”方法计算特定 NSString 的大小,如下所示:

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

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

4

2 回答 2

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 中没有可用的确切解决方案。

于 2013-07-03T13:29:46.543 回答
0

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

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

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

于 2013-07-03T13:29:49.763 回答