2009-08-30 75 views
4

我试图做一个UITableViewCell,根据它显示的字符串的长度来调整它的高度,但是在这个方法上挂起来了。为什么我的sizeWithFont:constrainedToSize:lineBreakMode:总是返回零?

下面是我得到了什么:

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。我错过了什么?

谢谢!

回答

11

CGFloat s对应于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

+0

唉唉,切换到'%F'完全奏效。我的印象是'%d'也适用于'浮动',但事实并非如此。 'MAXFLOAT'似乎可以正常工作,尽管它适用于大量的数据。感谢您及时的回复! – Triz 2009-08-30 01:03:28

+1

另外,'%d' = signed int,不是double(与'%i'相同)。 '%f'(或'%lf')将适用于浮动和双打。 (另外,在64位下,CGFloat是双精度值,但在这里显然不适用。) – Wevah 2009-08-30 01:10:02

+2

这里更好的常量可能是CGFLOAT_MAX,但没有使用MAXFLOAT的危险。要么比选择一个随机的大数字更清晰,这可能会被后来的读者解释为有意限制。 – 2009-08-30 03:05:22

5

你也可以使用

NSStringFromCGSize(theSize);