2014-08-28 25 views
1

我在UITableViewCell中有一個UILabel。 UILabel的高度取決於使用自動佈局約束的UITableViewCell的高度。 UILabel的寬度是176.0並且是固定的。錯誤的CGRect for boundingRectWithSize:options:attributes:context:

我使用boundingRectWithSize:options:attributes:context:作爲UILabel中的文本來確定UITableViewCell的高度。

這裏是展示接口建設者

enter image description here

enter image description here

的UILabel配置這是代碼即可獲得boundingRect爲的UILabel文本的截圖。

 NSString *text = @"Extra long goods charge"; 
     CGSize maxSize = CGSizeMake(176.0f, MAXFLOAT); 
     CGRect rect = [text boundingRectWithSize:maxSize 
             options:NSStringDrawingUsesLineFragmentOrigin 
             attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16.0]} 
             context:nil]; 

返回的大小是152.132813, 18.1796875,但這個矩形是沒有大到足以容納Extra long goods charge文本。事實上,即使大小爲176, 18的矩形也不能包含此文本。

我的猜測是,我以某種方式與使用boundingRectWithSize

回答

0

嘗試改變的搞亂。換行爲「字符換行」並添加約束條件作爲標籤高度。 查看帶大小的邊界矩形是否返回正確的值。

如果不是,則刪除所有約束並檢查標籤高度,並根據所有標籤高度(從boundingrectwithSize返回的值)計算行高度應該是多少,並調整heightForRowAtIndexPath中單元格的高度UITableView的委託方法。這可能是您的文字雖然標籤的高度顯示了預期內容,但仍未顯示的另一個原因。

試一試。

[編輯]

我不能正確得到您得到適當的高度,你應該得到,這就是爲什麼它搞亂了文本的顯示。 如果是這種情況,那麼你可以嘗試這種方法。

NSString *message [email protected]"Your text here!"; 
CGSize expectedLabelSize = [message sizeWithFont:[UIFont systemFontOfSize:16.0f] constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByCharWrapping]; 

雖然如果是這樣的話,那麼上面這個方法在iOS 7中不推薦使用,但它的工作原理很好。

+0

1.如何更改界面構建器中的任何內容將影響由boundingRectWithSize返回的大小: 2.問題是由boundingrectwithSize返回的大小太小。我嘗試在界面生成器中使用這個尺寸作爲UILabel的框架大小,並且我無法適應文本。 – db42 2014-08-28 05:35:07

+0

「不能包含文本」,如「...」帶有不完整文本? – 2014-08-28 05:46:13

+0

核心問題 - http://stackoverflow.com/questions/25562838/weird-behaviour-of-boundingrectwithsizeoptionsattributescontext – db42 2014-08-29 06:39:07