2

私がしたいこと:

UITableViewControllerメソッドのheightForRowAtIndexPathでは、行の高さをハードコーディングするのではなく、その値を推測したいと考えています。

Interface Builder のストーリーボードで以前に値を設定しました。

間違ったアプローチ:

次のメソッドは、実際のセルが作成される前に呼び出されてループするため、間違ったアプローチです。

// wrong approach
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //AppTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AppCel" forIndexPath:indexPath];
    //int height = cell.frame.size.height;
    // TODO: Make it more dynamic
    return 112;
}

私が考えているアプローチ:

セルのmain.storyboardドキュメントを読み込んで高さの値を推測する方法はありますか? それとも他のアプローチがありますか?

関連質問検索:

2010 年にさかのぼる、次の未回答の関連する質問を見つけました。この他の質問は、ストーリー ボード ドキュメントではなくセルの内容から高さを導き出すため、あまり役に立ちません。

4

3 に答える 3

3

あなたがコーディングしたアプローチは、実際には完全に間違っているわけではありません。間違っているのは使用dequeueReusableCellWithIdentifier:forIndexPathです。代わりにdequeueReusableCellWithIdentifier、構成、レイアウト、および高さの計算が可能なプロトタイプ セルを提供するために使用できる、より単純なバージョンを使用する必要があります。

純粋に iOS8 を使用している場合、これはすべて新しい自動レイアウトで行われます。iOS7 もサポートする場合は、手動で行う必要があります。

次のリンクでは、使用する必要があるプロセスについて説明しています。私はこれを使用していますが、iOS7 と iOS8 の両方をサポートしたい場合に最適です。

動的セル レイアウトと可変行高さのために UITableView で自動レイアウトを使用する

高さを正しくするために回避しなければならない明らかではない問題があるため、セルでサイズクラスベースの制約を使用する場合にも注意する必要があります。サイズクラスを尊重しないオフスクリーンUITableViewCells(サイズ計算用)を参照してください。

于 2015-02-16T11:31:40.337 に答える
0

xib (CP_Cell.xib) にセルがある場合は、それを行うことができます。

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
     return ((CP_Cell *) [[NSBundle mainBundle] loadNibNamed:@"CP_Cell" owner:self options:nil].lastObject).frame.size.height;
 }
于 2015-02-16T11:14:29.857 に答える
0

はい、できます。

制約を使用autolayoutして、自動レイアウトに計算を任せることができます。

このリンクの AppCoda チュートリアルをチェックしてください

于 2015-02-16T11:10:58.460 に答える