为什么我的sizeWithFont:constrainedToSize:lineBreakMode:总是返回零?

4

我正在尝试创建一个UITableViewCell,根据它显示的字符串长度来调整其高度,但是在这个方法上卡住了。

这是我现在的代码:

NSString *text = @"A really long string in here";
CGSize theSize = [text sizeWithFont:[UIFont boldSystemFontOfSize:18.0f] constrainedToSize:CGSizeMake(265.0f, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];
NSString *stringHeight = [NSString stringWithFormat:@"%d", theSize.height];

无论如何,stringHeight 始终显示为 0。我错过了什么吗?
谢谢!
2个回答

11

CGFloat对应于C语言的float数据类型;它们的正确格式说明符是%f

 NSString *text = @"A really long string in here"; 
 CGSize theSize = [text sizeWithFont:[UIFont boldSystemFontOfSize:18.0f] constrainedToSize:CGSizeMake(265.0f, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];
 NSString *stringHeight = [NSString stringWithFormat:@"%f", theSize.height];

此外,你应该使用 CGFLOAT_MAX 而不是 MAXFLOAT


啊,切换到%f完全奏效了。我原本以为%d也适用于浮点数,但显然并非如此。MAXFLOAT似乎也可以正常工作,不过使用一个足够大的数字同样可以达到目的。感谢您的快速回复! - Triz
1
另外,%d表示有符号整型,而不是双精度浮点型(与%i相同)。%f(或%lf)适用于浮点数和双精度浮点数。(此外,在64位下,CGFloat是双精度浮点数,但这显然不适用于此处。) - Wevah
2
这里更好的常量可能是CGFLOAT_MAX,但使用MAXFLOAT也没有危险。任何一个都比选择一个随机大数更清晰,后来的读者可能会将其解释为有意的限制。 - Rob Napier
感谢您的输入;我已经删除了关于双精度浮点数的错误信息,并切换到CGFLOAT_MAX。 - rpetrich

5
您也可以使用
NSStringFromCGSize(theSize);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接