2

私のアプリには、カスタマイズされたテーブルビューセルを備えたテーブルビューがあります。iOS5では、次のコードスニペットを使用して、カスタマイズしたセルの正しい高さを取得します。iOS6では、[tableView reloadData]を実行した後、[celllayoutIfNeeded]はセルのlayoutSubViewsメソッドをトリガーしません。そのため、セルの高さが誤って計算されます。これがなぜであるかについての良い提案はありますか?それとも、それを行う別の方法ですか?

- (CGFloat)tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self tableView:aTableView cellForRowAtIndexPath:indexPath];
    [cell setNeedsLayout];
    [cell layoutIfNeeded];
    [cell sizeToFit];

    return cell.frame.size.height;
}
4

1 に答える 1

1

あなたのコード スニペットには、テーブル ビューのライフ サイクルに関する根本的なエラーがあります。あなたが主張したようにiOS 5またはどこでも動作する場合は、幸運かもしれません.

まず、tableView:heightForRowAtIndexPath:BEFORE と呼ばれtableView:cellForRowAtIndexPath:ます。この時点では、細胞は存在しません。ここに電話してはいけませんUITableViewCell *cell = [self tableView:aTableView cellForRowAtIndexPath:indexPath];

tableView のサブビューをレイアウトするために (View Controller の最上位ビューであると仮定します)、viewWillLayoutSubviewsView Controller のメソッドをオーバーライドできます。それがAppleの推奨事項です。

テーブル ビュー セルのサブビューをレイアウトするには、UITableViewCell をサブクラス化し、そのlayoutSubviewsメソッドをオーバーライドできます。

于 2013-02-02T14:32:33.580 に答える