【问题标题】:Calculating the CGSize of an unknown NSString计算未知 NSString 的 CGSize
【发布时间】:2013-07-03 10:27:44
【问题描述】:

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

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

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

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

【问题讨论】:

  • 为了帮助人们回答你的问题,你可能想用你正在使用的语言来标记它,并提供一个例子来说明你到目前为止已经尝试过什么以及什么不适合你.
  • 谢谢...我已经为问题添加了标签和更多描述。

标签: ios objective-c nsstring fontmetrics sizewithfont


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我认为没有办法。

    为什么需要传递字符串?

    • 因为它的字母会占用宽度,并且会根据所选字体进行更改。就像,'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 中没有可用的确切解决方案。

    【讨论】:

    • 看来这是唯一的办法;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 2018-03-20
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多