单元格高度取决于标签文本

时间:2014-05-28 15:18:24

标签: ios uitableview

我从Core Data获取对象self.name = [[abc anyObject] valueForKey:@"name"] 并显示它:

cell.nameLabel.text = [NSString stringWithFormat:@"%@",self.name];
cell.nameLabel.numberOfLines = 0;
cell.nameLabel.lineBreakMode = NSLineBreakByWordWrapping;

如何在- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

中为我的单元格返回正确的高度

3 个答案:

答案 0 :(得分:2)

这是解决方案:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CGSize constraintSize = CGSizeMake(286.0f, CGFLOAT_MAX);
    UIFont *theFont  = [UIFont systemFontOfSize:14.0f];
    CGSize theSize;

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
    {
        CGRect frame = [[self.mArray objectAtIndex:indexPath.row] boundingRectWithSize:constraintSize options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading) attributes:@{NSFontAttributeName:theFont} context:nil];
    theSize = frame.size;
    }
    else
    {
        theSize = [[self.mArray objectAtIndex:indexPath.row] sizeWithFont:theFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];
    }

    return theSize.height;
    }

同样在- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath我使用cell.label.numberOfLines = 0

如果您在行中使用多个标签 - 在CGSizeMake(286.0f, CGFLOAT_MAX)中使用低于286.0f的值(例如150.0f)

答案 1 :(得分:1)

只需在UITableViewCell类中实现一个静态方法,该方法可以根据提供的字符串和宽度计算单元格高度。 Cell应该知道它是如何构造的以及它将占用多少空间。

例如:

+ (CGFloat)heightForWidth:(CGFloat)width text:(NSString *)text {

    CGFloat height = ... ;

    return height;
}

答案 2 :(得分:0)

尝试在故事板中禁用自动布局,然后调用sizeToFit。

cell.nameLabel.text = [NSString stringWithFormat:@"%@",self.name];
cell.nameLabel.numberOfLines = 0;
cell.nameLabel.lineBreakMode = NSLineBreakByWordWrapping;
[cell.nameLabel sizeToFit];