web-dev-qa-db-ja.com

heightForRowAtIndexPath内のUITableViewCellを取得する方法

UITableViewCellメソッド内で、つまりindexPathが指定されている場合、heightForRowAtIndexPathを取得するにはどうすればよいですか?

(そして、私はそれらの高さを追加するために作成したコンテンツビューにアクセスできました)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  // How to get the UITableViewCell associated with this indexPath?
}

ありがとう

編集:実際にこれを行うには本当に有効な方法がありますか? NSLogステートメントをいくつか入力すると、heightForRowAtIndexPathcellForRowAtIndexPathへの呼び出しの前に数回呼び出されたようです(ここでUILabelsを細胞)?この種類は、機能しない手法を使用しようとした可能性があることを意味します。つまり、heightForRowAtIndexPathを使用して、各セルで既に作成されているラベルにアクセスし、高さを取得して、セル全体の行に追加します。高さ。ただし、それらがまだセットアップされていない場合(cellForRowAtIndexPath内)、私のアプローチは実際には機能しないと思いますか?

27
Greg

TableView自体の代わりにtableviewのデリゲートを使用できます。

id cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];

答えを確認してください ここ

更新しました

新しいiOSバージョンで正しい自動制約を使用すると、セルの高さを計算するためにセルを参照する必要がなくなります。

ここをチェック

https://www.raywenderlich.com/129059/self-sizing-table-view-cells

24
iosMentalist

この質問は意味がないので

heightForRowAtIndexPath

セルはまだ作成されていません。 tableViewの仕組みは次のとおりです。

  1. TableViewは、データソースにセクションの数を尋ねます。 -numberOfSectionsInTableView
  2. 各セクションの行数をデータソースに尋ねます(スクローラーの大きさを知るためなど)-numberOfRowsInSection
  3. visible rowのデリゲート高さを尋ねます。細胞が配置される場所を知ること。 - heightForRowAtIndexPath
  4. 最後に、指定されたインデックスパス-cellForRowAtIndexPathに表示するセルを与えるようにデータソースに要求します

そのため、heightForRowAtIndexPathからセルにアクセスすることはできません。セルがまだ作成されていない可能性が高いためです。


しかし、あなたの質問を誤解した場合に備えて、以下を試してください:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
19
haawa

明白な答えはcellForRowAtIndexPathを呼び出すことですが、すでにいくつかの問題があることに気付いているかもしれません。まだ行っていない場合は、この質問を参照してください: ITableView flexible/dynamic heightForRowAtIndexPath

私の最後のプロジェクトでは、UICellのカスタムサブクラスを使用して、このようなメソッドを実装しました。次に、これをtable:heightForRowAtIndexPath:から呼び出しました(その行のコンテンツを調べた後)。

+ (CGFloat) heightOfContent: (NSString *)content
{
    CGFloat contentHeight = 
           [content sizeWithFont: DefaultContentLabelFont
               constrainedToSize: CGSizeMake( DefaultCellSize.width, DefaultContentLabelHeight * DefaultContentLabelNumberOfLines )
                   lineBreakMode: UILineBreakModeWordWrap].height;
    return contentHeight + DefaultCellPaddingHeight;
}
14
skue

データ構造(テキストの高さ、画像、マルチラインテキストなど)を使用して_table:heightForRowAtIndexPath:_の行の正しい高さを計算することをお勧めします。

-(void) layoutSubviewsメソッドでコンポーネントの高さを変更します。

4
Jhaliya

セルにアクセスする場合は、タグを使用します。しかし、@ Jhaliyaが言ったように、セルの内容に基づいて高さを計算する方が良いです。セルの位置を考慮している場合は、スクロールビューを使用してセルを自分で実装することをお勧めします。

1
Prajwal Udupa