0

こんにちは、制約によってプログラムで幅を変更する tableView があります。

    self.widthTableLeft.constant = self.view.frame.size.width;

これはviewDidLoadで行います。

デリゲート メソッドで:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

セルの高さを計算するには、各セルの contentview フレームが必要ですが、それを取得すると、これは古いサイズです。サイズ変更を行わなかった場合のサイズを意味します。

テーブルが表示されると、テーブルのサイズは正しいのですが、セルの高さが間違っています。

私は電話しようとしました:

[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];

[cell.contentView setNeedsLayout];
[cell.contentView layoutIfNeeded];

問題は、View Controller のビューを表示する前に、UITableView の幅の制約を更新し、heightForRowAtIndexPath メソッドのセルで適切な contentView を取得するのに最適な場所はいつかということです。

申し訳ありませんが、私は迷っています。何かアイデアをいただけますか?

ありがとう

アップデート

これは heightForRowAtIndexPath のコードです

static const NSInteger ROC_TITLE_LABEL_TAG = 2;

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

ROCAgendaItemDetailEntity *agendaItemDetail = [self.listRight objectAtIndex:indexPath.row];

UITableViewCell *cell = [self.tableLeft dequeueReusableCellWithIdentifier:@"cellVideo"];

//I get the label which will make the cell bigger
UILabel *titleLabel = (UILabel *)[cell viewWithTag:ROC_TITLE_LABEL_TAG];

//We init the height title with the min height.
float extraSpaceHeightLabel = 0;
if (agendaItemDetail.agendaItem.title.length > 0) {

    //I will use his width to get the hight that I need to write all text
    float width = titleLabel.frame.size.width;

    CGSize size = CGSizeMake(width, CGFLOAT_MAX);

    //we get the size
    CGSize sizeTitleLabel = [agendaItemDetail.agendaItem.title sizeWithFont:[ROCTextsInformation imagoMed:15] constrainedToSize:size lineBreakMode:titleLabel.lineBreakMode];
    //we substract the current height of the label to know the extra space to write all text
    sizeTitleLabel.height -= titleLabel.frame.size.height;
    extraSpaceHeightLabel = sizeTitleLabel.height;

}
//The final hight will be the contenViewHeight pluss the extra space needed.
return cell.contentView.frame.size.height + extraSpaceHeightLabel;
}

これはテーブルビューのセルです

ここに画像の説明を入力

再度、感謝します

4

1 に答える 1