2011-10-12 31 views
0

我在自定義UITableCell子類中出現了一個奇怪的問題。此自定義單元有一對UILables,它們是多行的,可以包含不同數量的文本(最多2000個字符)。自定義的TableCell有我在哪裏使用下面的代碼計算其幀的高度佈局方法,以設備的方向考慮:自定義表中的UILabel文本溢出細節

if (isPortrait) { 
    presentationTextLabelSize = [presentationTextStr sizeWithFont:[UIFont systemFontOfSize:12.0f] constrainedToSize:CGSizeMake(portraitDescriptionWidth, 2000.0f) lineBreakMode:UILineBreakModeWordWrap]; 
    presentationTextLabelRect = CGRectMake(60.0f, 25.0f, portraitDescriptionWidth, presentationTextLabelSize.height); 
} else { 
    presentationTextLabelSize = [presentationTextStr sizeWithFont:[UIFont systemFontOfSize:12.0f] constrainedToSize:CGSizeMake(landscapeDescriptionWidth, 2000.0f) lineBreakMode:UILineBreakModeWordWrap]; 
    presentationTextLabelRect = CGRectMake(60.0f, 25.0f, landscapeDescriptionWidth, presentationTextLabelSize.height); 
} 

self.presentationTextLabel.frame = presentationTextLabelRect; 

我有標籤的autoResizeMask設置如下:

self.presentationTextLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin; 

我在UITableViewController中使用相同的計算來設置行高度。

一切正常,標籤的大小適合其寬度的正確高度,單元格會自動調整設備旋轉的大小,但當設備旋轉到橫向時,標籤的文本有時會從標籤的框架向右延伸,清除tableView的邊緣。如果我將該單元格從視圖中移出並再次返回,它將恢復正常。我將單元格的寬度記錄到控制檯,並且它是正確的,但是文本延伸到遠遠超過該寬度。

任何想法是什麼關於?

由於

+0

可能這與緩存表中的UITableViewCell實例有關。可能有更好的解決方案;但你可以在設備輪換時向UITableView發送'reloadData'消息嗎? – FluffulousChimp

回答

0

的問題是,所述tableView當設備旋轉爲橫向不重新加載。所以,在更新文本時存在不匹配。在地方使用[tableView reloadData];,您會發現設備已更改爲橫向模式。

+0

這個答案讓我走上了正軌,雖然它比重新載入表格數據更復雜。我必須在自定義tableViewCell中爲所有可見單元格執行自定義重佈局,並且還改變了我設置自定義單元格textField寬度的方式。我最終使用contentView的邊界來精確設置textField的寬度。 – Alpinista