2015-07-03 67 views
1

我正在使用多行UILabelUITableViewCell進行自動佈局。我的UILabel固定在頂部,右側,底部和左側。一切工作正常,直到我添加一些頂部邊緣;如果我這樣做,一些單元格的高度計算得很好,有些則沒有,所以文本在這些情況下被截斷。Xcode 6,iOS7 UITableViewCell UIlabel多行,Autolayout噩夢

我簡化了我的觀點,因爲有點複雜。它看起來像這樣:

enter image description here

enter image description here

這是相關的代碼,我計算細胞的高度:

CellMessage *cell = self.prototypeCell; 
cell.message = [self messageForRowAtIndexPath:indexPath]; 
[self.prototypeCell layoutIfNeeded]; 

CGSize size = [self.prototypeCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 
    message.cellHeight = size.height + 1; 

我已經閱讀了大量SOF線程和教程,以及所有它們在微妙點上有所不同,有時他們說設置一個首選的最大寬度是關鍵點,我嘗試設置並沒有設置它,但我有相同的結果,但我不完全明白這個pa公羊工作:(

我在想什麼/做錯了什麼?任何我可以嘗試的東西,或任何提示指向正確的方向將非常感激。

+0

您是否嘗試將尾隨約束設置爲'='? –

+0

http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout –

+0

我想知道爲什麼要設置Trailling Space> =?如果你想讓單元格到UILabel展開,請嘗試使用tralling space =並將壓縮阻力優先級設置爲默認值(即751) – thanyaj

回答

0

所以,我有一個類似的問題,不久前。 我的工作了這種方式(這是對SWIFT):

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
CellMessage *cell = (CellMessage *)[tableView.dataSource tableView:tableView cellForRowAtIndexPath:indexPath]; 
[cell sizeToFit]; 
[cell setNeedsUpdateConstraints]; 
[cell updateConstraintsIfNeeded]; 

CGSize size = [cell systemLayoutSizeFittingSize: UILayoutFittingCompressedSize]; 

return size.height+1; 
} 

這將計算與文本數據的大小。 但你會有一個問題,要計算文本的權利,你將需要使用約束來確定寬度,它不能拖尾/領先,它需要是一個寬度約束,所以在UITableViewCell自定義類你可以這樣做:

- (void)updateConstraints { 
[super updateConstraints]; 
self.myLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.myLabel.frame); 
} 

titleLabel是作爲屬性鏈接的UILabel。

順便說一句,嘗試修復您的尾隨常數,而不是> =

+0

你能用相同的語言回答OP程序嗎?他在ObjC中寫道,儘管它們很容易翻譯,但在ObjC中也會更好。 –

+0

感謝@RodolfoAntonici。它看起來很有希望,但我仍然有同樣的問題:(我必須在這裏丟失一些明顯的東西 – ssantos

+0

感謝@朱連。至於我,經過12個小時的努力(真的),只要它作品:) – ssantos