我很努力如何在uitableviewcell內動態調整uilabel的大小,並根據我放入標籤的文本調整表格單元格的高度。我想在tableview單元格中顯示一個完整的字符串,對於所有的單元格總是以相同的字體大小顯示。這看起來很標準,但我注意到很多討論/辯論/對stackoverflow的不滿。我開始與這些職位:動態調整大小的多行UILabel和附帶的表格視圖單元編程方式
Resize Custom cell with a UILabel on it based on content text from JSON file(@塞牙的答案) boundingRectWithSize for NSAttributedString returning wrong size(@ JOM的答案)
我試圖使用的功能是什麼塞牙沒有副本,幾乎沒有修改。但是,我發現雖然該功能爲不同的單元格打印出不同的高度,但我看到的每個標籤都有1行文本,即使它們應該顯示很多行。另外,奇怪的是,一個單元格的文本似乎顯示在另一個單元格的頂部 - 不確定這是否相關。
我的2個問題:(1)爲什麼我只看到第一行文字? (2)爲什麼UILabel/cell沒有按照我在日誌中打印的不同高度來調整大小(或者它們調整大小,但是被問題#1掩蓋了)?
這裏的三種功能,我使用(這些連同廈門國際銀行 - 可以在廈門國際銀行是什麼問題?):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
JudgeCell *cell = [tableView dequeueReusableCellWithIdentifier:@"JudgeCell"];
if(!cell)
{
[tableView registerNib:[UINib nibWithNibName:@"JudgeCell" bundle:nil] forCellReuseIdentifier:@"JudgeCell"];
cell = [tableView dequeueReusableCellWithIdentifier:@"JudgeCell"];
}
cell.username.text = self.object.answerUser[indexPath.row];
cell.answer.text = self.object.answerArray[indexPath.row];
NSString *text = cell.answer.text;
CGSize constraint = CGSizeMake(50, 20000.0f);
CGSize size = [self frameForText:text sizeWithFont:[UIFont systemFontOfSize:15] constrainedToSize:constraint];
cell.username.frame = CGRectMake(10, 10, 50, size.height); //MAX(size.height, 14.0f));
return cell;
}
-(CGSize)frameForText:(NSString*)text sizeWithFont:(UIFont*)font constrainedToSize:(CGSize)size {
NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping;
NSDictionary * attributes = @{NSFontAttributeName:font,
NSParagraphStyleAttributeName:paragraphStyle
};
CGRect textRect = [text boundingRectWithSize:size
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:attributes
context:nil];
NSLog(@"size is %f ", textRect.size.height);
return textRect.size;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
NSString *text = self.object.answerArray[indexPath.row];
CGSize constraint = CGSizeMake(50, 20000.0f);
CGSize size = [self frameForText:text sizeWithFont:[UIFont systemFontOfSize:15] constrainedToSize:constraint];
CGFloat height = size.height; //MAX(size.height, 14.0f);
NSLog(@"size is %f AT INDEX %d", height, indexPath.row);
return height + 20;
}
感謝您的諮詢!
您是否嘗試致電[cell setNeedsDisplay]?在cellForRowAtIndexPath中設置新大小後? – Priyatham51 2014-11-21 00:48:46
@ Priyatham51是的,我也試過,但沒有奏效。 – 2014-11-21 16:12:11