2011-01-08 16 views
2

UIKitがセルをレンダリングするとき、高さを計算するのにtableView:heightForRowAtIndexPath:を使用することがわかります。私の質問は、どのように実際にUITableViewCellに設定されるのですか?ダイナミックセルを作成したいと思い、セル内のテキストの配置を計算する必要があります。私はself.boundsとself.frameだけを使うことができると信じています - 私はちょうどdequeueReusableCellWithIdentifierの使用でそれらが設定されている点について興味がありました。UITableViewCellの高さはどのように設定されるのですか

ありがとうございました。

答えて

5

tableView:cellForRowAtIndexPath:からセルを返すと、tableviewはセルの境界を含む多くのプロパティを設定してからtableView:willDisplayCell:forRowAtIndexPath:を呼び出します。その呼び出し後の唯一の変更は、アルファ/フレームを設定することです。

UITableViewCellを使用している場合は、テキストをtableView:willDisplayCell:forRowAtIndexPath:にレイアウトして、セルの幅と高さが正しく設定されていることを確認してください。つまり、基礎だけでは何もしていない場合は、サブクラス化することを検討することができますUITableViewCell。あなたのサブクラスでは、あなたのフィールドをlayoutSubviewsにレイアウトすることができ、あなたのセルが常に正しく配置されることが保証されます。

+0

私の目標は、drawRectを使ってセルの内容を描画することです。そのため、UITableViewCellをサブクラス化します。私はtableView:willDisplayCell:forRowAtIndexPath:でsetNeedsDisplayを呼び出すべきですか、それともUiTableViewCellのlayoutSubviewsから呼び出すべきですか?フローの概要を示すドキュメントがあるので、これを最もうまくいく方法がわかりますか?ご協力いただきありがとうございます。 – Brian

0

あなたはこのように、heightForRowAtIndexPathデリゲートを使用することができます。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGFloat result; 
    result = 120.0f; 
    return result; 
} 

上記の例では、任意の細胞帽子がcanEditRowAtIndexPathデリゲートで作成されて設定されます。

セクションとローの値を使用して、高さが設定されているセル/セクションを決定することもできます。

+0

助けてくれてありがとうございますが、UITableViewCellが高さを知っているところが何であるか興味を持っています。 – Brian

+0

リターンセル、それは、UITableViewがcellHeightを探す点です。 – WrightsCS

+0

私は[UITableViewCell setNeedsDisplay]を呼び出すことができるので、私の質問に答える必要があると思います。 – Brian

0

あなたはそれがのdrawRectでの細胞の適切な場所に表示させるためにあなたの計算を行う必要があり

- (void)drawRect:(CGRect)rect 
{ 
//You need to do your calculation for 
[super drawRect:rect]; 
} 

カスタムセルを拡張することができます。

+1

これは彼が尋ねたものではないだけでなく、セルがバックグラウンドビューを持っている(グループ化されたテーブルビューのように)場合でも機能しません。 –

関連する問題