0

私はに取り組んでいUITableViewます。私のアプリでは、いくつかのデータを 2 つのセクションに表示する予定でcustom cell、実際にcustomCellは 2 がありUILabel label1 & label2ます。最初sectionは表示するデータが単純なので問題ありませんが、表示する行が 4 行ある 2 番目のセクションを表示すると、3 行のうち表示する行がはるかに大きくstringなります。そのラベルを表示するために、Cell と UILabel ビューの高さを増やしています。

セルの高さを増やすには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;
}

十分に検索しましたが、答えがありませんでした。助けてください。前もって感謝します。

4

2 に答える 2

0

セルに別の CellIdentifier を使用してみてください。このようにして、テーブルビューは reusablecell 呼び出しでセルの内容を誤って配置しません。

于 2013-08-06T16:40:52.140 に答える