增加包含2个UILabel的Custom UITableViewCell的大小

时间:2013-08-06 11:00:56

标签: iphone ios uitableview

我正在研究UITableView。在我的应用中,我要在2个部分中显示一些数据,我有一个custom cell,实际上在customCell我有2 UILabel label1 & label2。 首先section是好的,因为它有简单的数据显示,但是当我显示第二部分,我有4行要显示时,3行中有更大的string来显示。所以要显示标签我正在增加Cell和UILabel视图的高度。

增加Cell I实现方法heightForRowAtIndexPath的高度,如下所示

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (1 == indexPath.section && 0 != indexPath.row)
    {
        return _profileTableView.rowHeight + 50.0;        
    }
    else
    {
        return _profileTableView.rowHeight;
    }

}

heightForRowAtIndexPath方法中的问题是,只有第3行和第4行的大小增加,当我尝试将新帧设置为label1和label2时,不会出现任何更改。标签在单元格中显得非常低。

这是我实现cellForRowAtIndexPath方法

的方式
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    ISClientProfileCell *cell = nil;

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
    cell = (CustomCell *)[nib objectAtIndex:0];
    cell.label1.font = [UIFont fontWithName:defaultFont size:18];
    cell.label2.font = [UIFont fontWithName:defaultBoldFont size:18];

    if(0 == indexPath.section)
    {
        // first section is fine
    }
    else
    {
        switch (indexPath.row)
        {
            case 0:
            {
                cell.label1.text  = @"Data 1:";
                [cell.label1 sizeToFit];
                CGRect frame = cell.label1.frame;
                frame.origin.y = 11;
                cell.label1.frame = frame;

                frame = cell.label2.frame;
                frame.origin.x = cell.label1.frame.size.width + cell.label1.frame.origin.x+5;
                frame.origin.y = 11;
                cell.label2.frame = frame;
                cell.label2.text = [[NSUserDefaults standardUserDefaults] valueForKey:key];
                [cell.label2 sizeToFit];
                break;
            }

            case 1:
            {              
                cell.label2.numberOfLines = 5;
                cell.label2.lineBreakMode = NSLineBreakByClipping;
                cell.label1.text = @"Data 2:";
                [cell.label1 sizeToFit];
                CGRect frame = cell.label1.frame;
                frame.origin.y = 11;
                cell.label1.frame = frame;

                frame = cell.label2.frame;
                frame.origin.x = cell.label1.frame.size.width + cell.label1.frame.origin.x+5;
                frame.origin.y = 11;
                cell.label2.frame = frame;
                cell.label2.text = [[NSUserDefaults standardUserDefaults] valueForKey:aKey];
                [cell.label2 sizeToFit];

                break;
            }

            case 2:
            {  
                cell.label2.numberOfLines = 5;
                cell.label2.lineBreakMode = NSLineBreakByClipping;              
                cell.label1.text = @"Data 2:";
                [cell.label1 sizeToFit];
                CGRect frame = cell.label1.frame;
                frame.origin.y = 11;
                cell.label1.frame = frame;

                frame = cell.label2.frame;
                frame.origin.x = cell.label1.frame.size.width + cell.label1.frame.origin.x+5;
                frame.origin.y = 11;
                cell.label2.frame = frame;
                cell.label2.text = [[NSUserDefaults standardUserDefaults] valueForKey:bKey];
                [cell.label2 sizeToFit];
                break;
            }

            case 3:
            {
                cell.label2.numberOfLines = 5;
                cell.label2.lineBreakMode = NSLineBreakByClipping;
                cell.label1.text = @"Data 2:";
                [cell.label1 sizeToFit];
                CGRect frame = cell.label1.frame;
                frame.origin.y = 11;
                cell.label1.frame = frame;

                frame = cell.label2.frame;
                frame.origin.x = cell.label1.frame.size.width + cell.label1.frame.origin.x+5;
                frame.origin.y = 11;
                cell.label2.frame = frame;
                cell.label2.text = [[NSUserDefaults standardUserDefaults] valueForKey:cKey];
                [cell.label2 sizeToFit];
                break;
            }                

        }
    }

    return cell;
}

我搜索得足够多但没有回答对我有效。 请帮忙。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

试试这段代码: -

  - (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (indexPath.section !=0 && indexPath.row !=0)
        {
            return 44.0 + 50.0;        
        }
        else
        {
            return _profileTableView.rowHeight;
        }

     return 44.0;
    }

我希望它可以帮助您解决问题。

答案 1 :(得分:0)

尝试为您的细胞使用不同的CellIdentifier。这样,tableview不会在可重用单元调用上错误放置单元格的内容。