我正在開發一個ios應用程序,并使用autolayout我正在嘗試創建一個具有不同行高的表視圖 .
原型單元的布局如下:
我有一個主單元格(黑色)里面有一個UIView(紅色),里面有一個UILabel(藍色)
我添加的Autolayout約束如圖所示:
The UIView has the following Constraints:
80到單元格的左邊緣
從單元格的右邊緣
20
從單元格的上邊緣
15
從單元格的底部邊緣
15
The UILabel has the following Constraints:
20到UIView的左邊緣
從UIView的右邊緣
15
從UIView的上邊緣
10
從UIView的下邊緣
10
我需要UILabel根據其內部的文本大小在高度上動態 . 為此,我做了以下事情:
將UILabel的行數設置為0
將字體設置為Helvetica Neueu,大小為15(在界面構建器中)
將Lines Break設置為"Word wrap"(在界面構建器中)
在視圖Controller中,我實現了以下內容:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
//get the item
ListItem *item = (ListItem*) self.items[indexPath.row];
//calculate the label size based on the item title that we will display
CGSize textSize = [item.title sizeWithFont:[UIFont fontWithName:@"HelveticaNeue" size:15.0] constrainedToSize:CGSizeMake(tableView.frame.size.width - 135.f, 9999.f) lineBreakMode:NSLineBreakByWordWrapping];
//return the height + the 50 to accomodate with the layout
return textSize.height + 50.f;
}
基本上我正在做的是獲取我需要顯示的文本(item.title),我調用 sizeWithFont 來計算我需要多少空間用于該標簽并返回它 .
在sizeWithFont方法中,我傳遞我用于 Headers [UIFont fontWithName:@"HelveticaNeue" size:15.0] 的字體,然后根據圖片約束約束計算的大小,獲取tableView的寬度并減去邊距以獲得標簽
對于寬度:我減去80(對于UIView左)和20(對于標簽左)和15(對于標簽右)和20對于UIView右)
對于高度我放9999,因為我不需要約束它來進行計算 .
在我得到所需標簽的大小后,我返回了確切的高度加上標簽的垂直邊距為15,10,10和15(總計= 50) return textSize.height + 50.f;
The problem:
雖然我正在進行精確計算,但在運行應用程序時,它并非100%精確 . 雖然大多數情況下我得到一個精確的高度,但在某些情況下(特別是當我們在標簽中有例如3行,而第3行有一個單詞時),單元格的高度僅對應于2行并且切割第三行一 . 通過試驗和錯誤增加高度可能是可能的,但它也會影響顯示良好的細胞的高度 .
所以我的問題是,我的計算錯誤是什么?當使用autolayout時,有沒有辦法根據標簽中的文本為單元格設置動態高度?
謝謝