1

私が理解しているように、カスタム テーブル ビュー セルをレイアウトするには 3 つの方法があるようです。

  1. Interface Builder で。
  2. layoutSubviews
  3. initWithStyle:reuseIdentifier:

2 番目と 3 番目の方法の違いは何ですか? また、なぜdrawRectですか?

PS 私は、Tim Duckett 著の Pro iOS Table Viewsの第 9 章に従っています。ここでは、カスタムUITableViewCells を構築しています。著者は、セルを上記と同じ順序でレイアウトする方法を示していますが、最後の2つの違いはどちらもIBを廃止しているため、わかりません。ただし、作成者は、ビューの外観に関するプロパティ (背景画像、背景色など) が設定されている場所layoutSubviewsとは異なり、単にフレームを設定しているだけであることに気付きました。initWithStyle:reuseIdentifier:

4

2 に答える 2

4

セルのサブビューを作成する必要があります

- initWithStyle: (UITableViewCellStyle) style reuseIdentifier: (NSString*) resueIdentifier

そしてそれらをlayoutSubviewsにレイアウトします。 -initWithStyle:reuseIdentifierメソッドは初期化時に 1 回呼び出されますが、この時点でセルのフレームが正しくない可能性があります。

そのため、メソッドでレイアウトする必要がありますlayoutSubviews。セルがレイアウトを更新する必要がある場合、たとえば自動回転が発生した場合に呼び出されます。したがって、この方法でサブビューをレイアウトすると、有効なセルのフレームと正しいサブビュー レイアウトが得られます。

于 2013-07-31T08:12:17.217 に答える
2
-[UIView layoutSubviews]

ビューが再レイアウトされる方法をより詳細に制御できます(本の例では、テーブルセルのcontentViewで行われていると思います)。NIB ファイルを使用する場合、いくつかのプロパティを設定してビュー階層をメモリ内に再作成するだけですが、nib にはセルを再レイアウトする動的機能がありません (または、スプリング/構造体または自動レイアウト機能に制限されています)。 )。NIB を使用しない場合は、この階層をプログラムで作成する必要があります。

特にテーブルビューセルサブクラスでは、セルの再レイアウト方法を変更できる多くのプロパティを追加できます。たとえば、サムネイル画像を表示するかどうか、特定のラベルを表示するかどうかなどです。さまざまなプロパティ値に起因するすべての可能なレイアウトを考慮して、セル レイアウトを更新するメソッド。

于 2013-07-31T08:18:58.253 に答える