1

我有一个奇怪的问题。我sizeWithFont: forWidth: lineBreakMode:NSLineBreakByWordWrapping的返回错误的值。我有一个字符串数组,需要放在一个整洁的“表”中。单元格基本上是 s,其中UIViewUILabels。为了分配初始化单元格视图和带有正确框架的标签,我需要预先计算单元格的所需高度和包装视图的总高度,因为所有单元格都将放置在另一个视图中。我的代码如下所示:

#define kStandardFontOfSize(x)  [UIFont fontWithName:@"HelveticaNeue-UltraLight" size:x]

CGFloat size = 0.0f; //for computing the total size as cells will be placed in another view
items = [NSArray arrayWithObjects:@"You have 23 new followers", @"1125 new likes", @"Successful week with 24 new Twitter followers and 60 new email subscribers", @"1125 new tickets", nil];

for (NSString *item in items)
{
    if ([item sizeWithFont:kStandardFontOfSize(16) forWidth:100 lineBreakMode:NSLineBreakByWordWrapping].height < 25)
        size += 70; //either the cell will be 70 (140) pixels tall or 105 (210)pixels
    else
        size += 105;
    NSLog(@"%f, %f, %@", [item sizeWithFont:kStandardFontOfSize(16) forWidth:100 lineBreakMode:NSLineBreakByWordWrapping].width, [item sizeWithFont:kStandardFontOfSize(16) forWidth:100 lineBreakMode:NSLineBreakByWordWrapping].height, item);
}

但是日志返回了非常奇怪的值:

82.000000, 20.000000, You have 23 new followers
99.000000, 20.000000, 1125 new likes
70.000000, 20.000000, Successful week with 24 new Twitter followers and 60 new email subscribers
67.000000, 20.000000, 1125 new tickets

“1125个新点赞”的宽度怎么可能是99,而长串只有70呢?高度肯定应该大于20还是?

4

2 回答 2

4

Maister,发生这种情况是因为该方法[item sizeWithFont: forWidth:100 lineBreakMode:]正在考虑当单词不适合该行时,它会跳转到下一个。因此,标签(100 宽)将是这样的:

You have 23 
followers

而另一个标签可以适合整个字符串:

1125 new likes

现在您可以在我的文本中看到这两个字符串之间的区别(考虑到最大宽度:100)。如果更改lineBreakMode为 Character Wrap,它可能会给第一个字符串 100 和第二个字符串 99。

于 2013-08-15T14:38:14.260 回答
4

尝试使用[[NSString string] sizeWithFont:UIFont constrainedToSize:CGSize lineBreakMode:(NSLineBreakMode)]

于 2013-08-15T14:40:09.860 回答