UITableViewCell - 根据最后一个单元格的属性显示文本和背景图像

时间:2013-12-14 19:17:15

标签: ios uitableview ios7

在我的应用程序中,为iOS7设计,我有一个分组的UITableView。每行显示用户输入的一些文本。我根据每行文本的长度计算行高。每行也有相同的背景图像,但是根据行的高度使用resizableImageWithCapInsets进行拉伸。

以下是我的代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.currentChatView registerClass:[UITableViewCell class] forCellReuseIdentifier:
                                         @"CurrentText"];
    static NSString *CellIdentifier = @"CurrentText";
    UITableViewCell *cell = [self.currentChatView dequeueReusableCellWithIdentifier:
                             CellIdentifier forIndexPath:indexPath];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:CellIdentifier];
    }

    UIImage *cellImage;
    UIImageView *cellImageView = [[UIImageView alloc]init];
    UILabel *cellLabel = [[UILabel alloc]init];

    cellLabel.numberOfLines = 0;
    cellLabel.lineBreakMode = NSLineBreakByWordWrapping;
    cellLabel.text = [[self.textArray 
                       objectAtIndex:indexPath.row] objectForKey:@"text"];

    UIImage *image = [UIImage imageNamed:@"aqua.png"];
    UIEdgeInsets insets = UIEdgeInsetsMake(image.size.height/2, image.size.width/2, 
                                           image.size.height/2, image.size.width/2);
    cellImage = [image resizableImageWithCapInsets:insets];
    cellImageView.frame = CGRectMake(0, 0, 215, cellHeight + 5);
    cellLabel.frame = CGRectMake(10, 0, 200, cellHeight);

    cellImageView.image = cellImage;
    [cell.contentView addSubview:cellImageView];
    [cell.contentView addSubview:cellLabel];

    return cell;
}

计算表格行高度并正确显示。但是,文本和背景基于最后一行计算的高度显示。

例如,如果第二行有两行文本而最后一行只有一行,则显示第二行的高度为2行,但只有文本和图像的上半部分显示在行。行的下半部分为空,背景为白色。最后一行显示正确。

同样,如果最后一行有两行文字,那么所有行的图像背景都会被拉伸以填充两行文字。

我不确定原因是什么,无法在任何地方找到解决方案。非常欢迎您的建议。

2 个答案:

答案 0 :(得分:0)

我认为问题在于您使用实例变量cellHeight来存储每行的单元格高度,并且在需要时不会更新。您可以尝试使用(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中动态获取单元格高度。

答案 1 :(得分:0)

我想通了......所有行的单元格高度都是在heightForRowAtIndexPath中预先计算出来的。

当控制到达cellForRowAtIndexPath时,我有最后一个cellHeight。

最佳解决方案是在heightForRowAtIndexPath本身中分配imageView和标签帧大小。