1

まず、私は知っていて、定期的に使用しています。

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

...この質問はそれよりも少し複雑です:-)

データ駆動型のカスタム UITableViewController があります。実行時のテーブルの定義に応じて、選択したカスタム セル (それ自体が個別のカスタム UITableViewCell クラス) を取り込みます。

カスタム セルもデータ ドリブンであり、高さは実行時にのみ決定されます。

ランタイム ログを実行すると、表示されているセルに対して cellFor... を呼び出す前に、UITableViewController がテーブル内のすべてのセルに対して heightFor... を呼び出すことがわかります。

これは、高さを決定するために一度セルを構築し、要求されたときに再びセルを返す必要があることを意味します。

heightFor.. を介して高さのデフォルト値を返し、実際の高さがわかったらこれをオーバーライドすることは可能ですか?

または、セルを 2 回作成する必要がないようにする代替ソリューションはありますか?

提案をいただければ幸いです。

4

2 に答える 2

1

OK、それでここに良い解決策はありません(つまり、セルが作成されたら、セルの高さを変更することはできません)。

したがって、ここで行った解決策は、heightFor...内からcellFor...を呼び出すことです。これにより、高さを取得するためにセルが作成されます。次に、そのセルの高さをプロパティとして記録し、heightFor...から取得します。

高さを取得すると、セルは自動的に解放されます(保持されていないため)。もちろん、その直後に、UITableControllerがセルを再度要求するため、セルは2回作成されますが、そのようになります...

これがコードで、これはうまく機能します。

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

    UITableViewCell <CMyTableViewDelegate> *cell = (UITableViewCell <MyTableViewDelegate> *) [self tableView:tableView cellForRowAtIndexPath:indexPath];

    height = [cell getHeight];

    return height;
}

それが他の誰かを助けることを願っています。

于 2012-08-21T08:17:03.837 に答える
0

いいえ、できません。解決策をもう一度考えてみてください。私はあなたにいくつかの指針を与えるつもりです。

  • 計算された高さをキャッシュする
  • uitablebiewcell 自体のパフォーマンスを確認します。サブビューが多すぎるのかもしれません。
  • 可能であれば高さを事前計算 - テーブル ビューのデータ ソースから要求される前に実行し、キャッシュされた高さを返します
于 2012-08-17T08:43:37.780 に答える