动态调整大小的UITableViewCell,UILabel的文本在一行后被截断

时间:2014-01-03 19:41:20

标签: ios dynamic uilabel tableviewcell

我试图实现动态大小的tableView单元格。单元格具有UILabel(以及其他东西),其中包含可变数量的文本。在我定制单元格之前,我只是使用cell.textLabel.text来设置文本,并且单元格调整得很好并且显示了所有文本。我根本不必弄乱标签。但是现在我的单元格中有一个自定义的UILabel,文本被切断了。我在这里看了很多答案,但似乎没有什么工作。

这是我的代码:

//This method gets the size of the text that will be inside the cell/label. This works fine
-(CGFloat)getLabelHeightForText:(NSString *)text andWidth:(CGFloat)labelWidth
{

    CGSize maximumSize = CGSizeMake(labelWidth, 10000);

    UIFont *systemFont = [UIFont systemFontOfSize:15.0];
    //provide appropriate font and font size
    CGSize labelHeightSize = [text sizeWithFont:systemFont
                             constrainedToSize:maximumSize
                                 lineBreakMode:NSLineBreakByWordWrapping];
    return labelHeightSize.height;
}



//Dynamically changes the cell height. This works fine
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{


    NSString *reviewText = [[self.reviews objectAtIndex:indexPath.row] objectForKey:@"reviewText"];

    CGFloat textHeight = [self getLabelHeightForText:reviewText andWidth:self.tableView.frame.size.width];

    return (textHeight + 40);
}

//This is what doesnt seem to be working. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    //Review label
    NSString *reviewText = [[self.reviews objectAtIndex:indexPath.row] objectForKey:@"reviewText"];

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

    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;

    NSLog(@"Height: %f", reviewLabel.frame.size.height);

     NSLog(@"Width: %f", reviewLabel.frame.size.width);


//   cell.textLabel.text = [[self.reviews objectAtIndex:indexPath.row] objectForKey:@"reviewText"];
//   
//   cell.textLabel.numberOfLines = 0;
//    
//   cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;

    return cell;
}

如您所见,我已经记录了标签的高度和宽度。宽度保持恒定280,这是正确的,高度根据文本动态变化。一切看起来好像应该工作正常。但遗憾的是它没有。细胞大小很好。标签(从NSLogs判断)似乎调整得很好,为什么我的文字会被切断?

由于

1 个答案:

答案 0 :(得分:0)

我目前通过向原型单元格添加一些自动布局约束来解决这个问题。关闭自动布局也很有效。