UITableView自定义单元格显示奇怪的结果?

时间:2011-02-28 22:47:24

标签: iphone ios uitableview

UITableView自定义单元格显示奇怪的结果?我的代码如下。一切都很好,直到我把足够的数据从初始屏幕上移开然后它开始发疯了?我的自定义单元格如下所示。

enter image description here

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"customCell"; // This is identifier given in IB jason set this.

    PostTableCustomCellController *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {

        NSLog(@"Cell created");

        NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"PostTableCustomCellController" owner:nil options:nil];

        for(id currentObject in nibObjects)
        {
            if([currentObject isKindOfClass:[PostTableCustomCellController class]])
            {
                cell = (PostTableCustomCellController *)currentObject;  
            }
        }
    }

    Post *post = [postsArray objectAtIndex:indexPath.row];

    cell.authorName.text = post.author;
    cell.deadline.text = post.deadline;
    cell.description.text = post.description;


    Post *myPost = [postsArray objectAtIndex:[indexPath row]];
    NSString *text = myPost.description;

    // Configure the cell...            
    // [[cell authorName] setText:@"1 day"];
    // [[cell distance] setText:@"Austin, TX"];
    // [[cell description] setText:@"dd" ];


    // Might can remove these
    UILabel *locationLabel = (UILabel *) [cell distance];
    UILabel *postTextView = (UILabel *) [cell description];



    //CGSize maximumLabelSize = CGSizeMake(254,88.0f);



    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 88.0f);

    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

    CGFloat height = MAX(size.height, 35.0f);

    CGFloat realHeight = height + 36.0f - (10); 


    CGSize expectedLabelSize = [text sizeWithFont:postTextView.font 
                                constrainedToSize:constraint 
                                    lineBreakMode:postTextView.lineBreakMode];  
    CGRect newFrame = postTextView.frame;
    newFrame.size.height = expectedLabelSize.height;
    postTextView.frame = newFrame;

    [[cell description] sizeToFit];

    CGRect locationRect = locationLabel.frame; // calls the getter
    locationRect.origin.y = realHeight;

    /* CGFloat locRectHeight = postTextView.bounds.size.height; */
    /* locationRect.origin.y = cell.bounds.size.height; */
    locationLabel.frame = locationRect;

    //[[cell authorName] setText:@"jgervin"];
    [[cell viewForBackground] sizeToFit];


    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    Post *myPost = [postsArray objectAtIndex:[indexPath row]];
    NSString *text = myPost.description;

    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 88.0f);

    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

    CGFloat height = MAX(size.height, 35.0f);

    return height + (CELL_CONTENT_MARGIN * 2) + 36.0f; 
}

2 个答案:

答案 0 :(得分:1)

当您离开屏幕时,将旧单元格排队到dequeReusableCell,旧单元格中的内容和属性仍然必须存在。向单元格添加内容时,请务必清除以前的所有属性,以免出现这些问题,或者只关闭dequeReusableCell

答案 1 :(得分:0)

它看起来像是一个细胞重用问题。为什么不关闭出队单元机制并查看问题是否消失。如果是这样,请查看自定义单元格中的代码 - 您是否创建了字段标签的多个副本?看起来就是这样。