【问题标题】:ios7 storyboard dynamic UITableView cell height based on label contentios7故事板动态UITableView单元格高度基于标签内容
【发布时间】:2014-01-30 09:17:31
【问题描述】:

我正在尝试根据单元格中某些标签的内容来实现动态 UITableViewCell 高度。该单元格添加了一些其他 UI 对象(图像视图、一些静态标签等),并且我为所有内容设置了约束。只有一个标签需要动态调整大小。

我用这个方法来查找文字的大小:

-(CGFloat)getLabelHeightForText:(NSString *)text andWidth:(CGFloat)labelWidth
{
    CGSize maximumSize = CGSizeMake(labelWidth, 10000);

    UIFont *systemFont = [UIFont systemFontOfSize:15.0];
                               lineBreakMode:NSLineBreakByWordWrapping];

    CGSize labelSize = [text boundingRectWithSize:maximumSize options: NSStringDrawingUsesLineFragmentOrigin
                                       attributes: @{ NSFontAttributeName: systemFont } context: nil].size;
    return labelSize.height;
}

我确信有更好的方法可以做到这一点,但它现在有效。

在 cellForRowAtIndexPath 中,我正在调整标签的大小以能够容纳文本并设置适当的属性:

UILabel *reviewLabel = (UILabel *)[cell viewWithTag:102];

    //280 is the width of the label
    reviewLabel.preferredMaxLayoutWidth = 280;

    CGFloat reviewLabelHeight = [self getLabelHeightForText:reviewText andWidth:reviewLabel.frame.size.width];

    reviewLabel.frame = CGRectMake(reviewLabel.frame.origin.x, reviewLabel.frame.origin.y, reviewLabel.frame.size.width, reviewLabelHeight);

    reviewLabel.text = reviewText;

    reviewLabel.numberOfLines = 0;

    reviewLabel.lineBreakMode = NSLineBreakByWordWrapping;

效果很好,但我无法调整实际单元格的高度。现在我有

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

NSString *reviewText = [review objectForKey:@"reviewText"];

//280 is the width of the review label
CGFloat textHeight = [self getLabelHeightForText:reviewText andWidth:280]; 
}

但我不确定如何使用该文本高度调整单元格的大小。如果文本长度足够小而无需调整大小,则单元格通常为 91 像素高。因此,如果单元格不需要调整大小,或者确实需要调整大小,则我必须返回 91,返回文本高度 + 足够的像素以适应单元格中的所有其他对象?我对如何调整单元格大小感到非常困惑。标签调整大小很好,但无法弄清楚单元格。

【问题讨论】:

  • -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 中的所有代码还是还有更多?
  • 应该还有更多。那是我的问题。我不确定要返回什么才能使其正常工作
  • 在该方法上,您应该返回一个您创建的单元格。您使用的是默认的UITableViewCell 还是自定义单元格?
  • @xicocaio 我正在使用默认的 UITableView 单元格
  • 你的目标版本 ios6+ ios7+ 是什么?

标签: ios dynamic uitableview tableview


【解决方案1】:

你用的是ios7+,试试

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath

而不是tableView:heightForRowAtIndexPath

并返回一个具有所需高度偏移的 CGFloat。

【讨论】:

    猜你喜欢
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多