我需要根据内容大小/长度来调整单元格高度。尝试了几种方法,哪一种方法可以提供准确的高度而不会重叠?
答案 0 :(得分:4)
请参阅本教程以了解更改UITableViewCell
动态高度..
并使用本教程..
uitableviewcell-dynamic-height
还使用 tableView:heightForRowAtIndexPath:方法设置indexpath
答案 1 :(得分:3)
这是我之前的回答 - Customizing UITableViewCell's height:
使用此方法获取文本的文本高度
-(CGFloat)getLabelHeightForText:(NSString *)text andWidth:(CGFloat)labelWidth
{
CGSize maximumSize = CGSizeMake(labelWidth, 10000);
//provide appropriate font and font size
CGSize labelHeighSize = [text sizeWithFont: [UIFont fontWithName:@"Trebuchet MS" size:13.0f]
constrainedToSize:maximumSize
lineBreakMode:UILineBreakModeTailTruncation];
return labelHeighSize.height;
}
此方法将返回您传递的文本的高度。在您的课程中添加此方法。并使用 tableView:heightForRowAtIndexPath:委托方法设置每个单元格的高度
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
Feedback *item = [self.items objectAtIndex:indexPath.row];
CGFloat textHeight = [self getLabelHeightForText:item.comment andWidth:162];//give your label width here
return textHeight;
}
答案 2 :(得分:2)
您可以编辑并尝试
的示例 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary *itemAtIndex = (NSDictionary *)[chatQuestions objectAtIndex:indexPath.row];
if ([self sizeForText:[itemAtIndex objectForKey:@"text"]].height+20>50) {
return [self sizeForText:[itemAtIndex objectForKey:@"text"]].height+20;
}
else{
return 50;}
}
-(CGSize)sizeForText:(NSString*)text
{
CGSize constraintSize;
constraintSize.width = 190.0f;
constraintSize.height = MAXFLOAT;
UIFont *labelFont = [UIFont fontWithName:@"Noteworthy-Light" size:18];
CGSize stringSize =[text sizeWithFont:labelFont constrainedToSize: constraintSize lineBreakMode: UILineBreakModeWordWrap];
return stringSize;
}
答案 3 :(得分:1)
//Calculate the expected size based on the font and linebreak mode of your label
CGSize maximumLabelSize = CGSizeMake(296,9999);
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode];
//adjust the label the the new height.
CGRect newFrame = yourLabel.frame;
newFrame.size.height = expectedLabelSize.height;
yourLabel.frame = newFrame;
答案 4 :(得分:0)
在您的情况下,您需要根据标签设置单元格的高度。
检查链接:
http://dcraziee.wordpress.com/2013/05/22/calculate-size-of-uillabel-base-on-text-in/
有一个名为
的函数-(CGFloat)getHeightForLabel:(NSString *)_str font:(UIFont *)fontOfObject
使用该功能计算身高:
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
CGFloat _height = [self getHeightForLabel:self.label.text font:[self.label font]];
return _height;
}