我有UITableViewCell的问题,我想制作每个单元格的动态高度,我试过下面的代码:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if ([[tableView cellForRowAtIndexPath:indexPath] isKindOfClass:[CommentTableViewCell class]]) {
CommentTableViewCell* cell = (CommentTableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
return cell.descriptionText.frame.size.height + 20.0;
}
return 44.0;
}
但我有错误,我有此错误的屏幕截图https://drive.google.com/file/d/0Bz4j1JqQ0tI4T1Jsb2YxWnBvSTA/view?usp=sharing
然后我在本页中使用了Mohit tomar的回答: Change UITableView height dynamically
结果: https://drive.google.com/file/d/0Bz4j1JqQ0tI4R0t4M0k5THdxNEk/view?usp=sharing
答案 0 :(得分:0)
UITableView
首先获取单元格高度,然后创建单元格使用cellForRowAtIndexPath
方法。
所以你不能使用
CommentTableViewCell* cell = (CommentTableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
return cell.descriptionText.frame.size.height + 20.0;
获取单元格高度。
在heightForRowAtIndexPath
:方法中,您必须计算每个单元格的高度以获得返回值。
答案 1 :(得分:0)
如果您的目标是iOS≥8,则可以使用动态单元格高度:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
尽管如此,您还应提供tableView:estimatedHeightForRowAtIndexPath:
并返回食者44或细胞。高度。
请同时验证您的约束条件。您的第二个屏幕截图表示您没有正确的底部约束或优先级不正确。
你提到的SO-Answer绝对是正确的,只有iOS8 +
答案 2 :(得分:0)
在tableview的heightForRowAtIndexPath中,你必须计算文本的大小并返回该大小的“height”参数。
您可以维护以下功能来计算文本的大小
- (CGSize)heightForText:(NSString *)bodyText
{
CGRect rect = CGRectZero;
CGSize size;
UIFont *font = [UIFont fontWithName:@"Corbel" size:14.0];
float iosVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
rect = [bodyText boundingRectWithSize:CGSizeMake(240, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:font} context:nil];
size = CGSizeMake(rect.size.width, rect.size.height);
return size;
}
并在“heightForRowAtIndexPath”中将其用作:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGSize Size = [self heightForText:yourText];
return Size.height
}
这应该正确调整你的细胞大小