我正在努力解决如何在uitableviewcell中动态调整uilabel的大小,以及根据我放入标签的文本来调整表格单元格的高度。我想在tableview单元格中完整地显示一个字符串,所有单元格的字体大小始终相同。这似乎很标准,但我注意到很多关于stackoverflow的讨论/辩论/不满。我开始使用这些帖子了:
Resize Custom cell with a UILabel on it based on content text from JSON file(@ Seya的回答) boundingRectWithSize for NSAttributedString returning wrong size(@ JOM'答案)
我试图使用的功能是Seya所做的几乎没有修改的副本。但是,我看到尽管该函数为不同的单元格打印出不同的高度,但我看到的是每个标签的1行文本,即使它们应该显示多行。此外,奇怪的是,来自一个单元格的文本似乎显示在另一个单元格的顶部 - 不确定这是否相关。
我的2个问题:(1)为什么我只看到第一行文字? (2)为什么UILabel / cell没有根据我在日志中打印出的不同高度调整大小(或者他们调整大小但是被问题#1屏蔽)?
以下是我使用的三个功能(这些功能以及xib - xib可能是问题吗?):
- (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;
}
感谢您的任何建议!
答案 0 :(得分:0)
最后我删除了我的关联nib文件,不知何故,这似乎与本教程中的代码(与我上面已经发布的内容类似)的技巧有关:
http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/
请注意,本教程中的方法有时会标记为已弃用。如果我找到更新的教程,我会发布。