2

既存のセクションにもう1つのセクションを追加して、tableViewこれを取得しています:

ここに画像の説明を入力

私の新しいセルは高さによって縮小されます。適切な方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return cells[indexPath.section][indexPath.row];
}

- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if ([headers[section] isKindOfClass:[UIView class]])
        return [headers[section] frame].size.height;

    return 10.0f;
}

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    if ([headers[section] isKindOfClass:[UIView class]])
        return headers[section];

    return nil;
}

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = cells[indexPath.section][indexPath.row];

    if (cell == clientXibCell) return 100.0f;
    if (cell == agencyXibCell) return 145.0f;
    return 46.0f;
}

これを修正するために何をする必要があるのか​​ 理解できません。問題の原因が考えられるアイデアはありますか?

更新 カスタムセルビジュアルインターフェイスを事前定義すると、この問題が発生することがわかりました。

supervisorCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:nil];
    bgView = [[UIImageView alloc] initWithFrame:supervisorCell.backgroundView.frame];
    [bgView setImage:stretchableImageByHorizontal([UIImage imageNamed:@"cell_bgd_bottom"])];
    [supervisorCell setBackgroundView:bgView]; 
    bgView = [[UIImageView alloc] initWithFrame:supervisorCell.backgroundView.frame];
    [bgView setImage:stretchableImageByHorizontal([UIImage imageNamed:@"cell_bgd_bottom_active"])];
    [supervisorCell setSelectedBackgroundView:bgView];

セルを作成する最初のステートメントを除くすべてのコメントを外すと、セルのカスタム外観を除いてすべて正常に機能します。これを修正するには、この単純なコードで何を変更する必要がありますか?

4

1 に答える 1

2

セルの高さは によって制御されますheightForRowAtIndexPath:。コードを見ると、このメソッドは常に を返しているようです46

あなたの2つifsはポインタ、つまりセルのインスタンスを比較しています。これは、すべてのセルのうち、1 つが高さ100、1 つが高さ、145その他がすべて であることを意味します46.f

あなたが達成しようとしているのは、同じ種類のすべてのセルにこの高さを設定することだと思うのでheightForRowAtIndexPath:、以下のようにメソッドを変更する必要があります:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    if ( [cell isKindOfClass:[YourCustomCell1 class]] ) return 100.0f;
    if ( [cell isKindOfClass:[YourCustomCell2 class]] ) return 145.0f;
    return 46.0f;
}

Ps1:YourCustomCell自分のクラスのクラスを変更します。サブクラスがない場合は、タグなどを設定して区別してみてください。

Ps2: 常に tableview のメソッドcellForRowAtIndexPathを使用して、indexPath によるセルの参照を取得します。

于 2013-08-18T15:54:57.773 に答える