2009-08-30 77 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);