私は、estimatedHeightForRowAtIndexPath を使用するときの驚くべき問題または直観に反する動作を発見しました
(1) テーブルの行の高さが大きく異なります。最終結果は、111 から約 400 の範囲になります。
(2) 各行の高さを完全に計算します。私はこれらを配列で手元に持っています。つまり、キャッシュされています。
{これはまさに、Apple エンジニアが現在推奨していることに注意してください...例、ポイント 5 .. UITableView で自動レイアウトを使用して、動的なセル レイアウトと可変行の高さを実現する}
(3) heightForRowAtIndexPath が高さを要求する場合、絶対に正しい高さを指定します。
(4) セルを構築するときは、正確に正しい高さに構築します ((2) と (3) のように)。
{注 - もちろん、最終的にセルの高さを調整するのは iOS であり、「私」ではありません。}
これはすべて完璧に機能します。
つまり、各セルは iOS によって、heightForRowAtIndexPath で指定された正確な高さで構築されます。
さて、コードを追加します...
-(CGFloat)tableView:(UITableView *)tableView
estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 120;
}
実際、テーブルはもはや機能しません.... 行の高さがランダムになります!!!
この信じられない行動を見た人はいますか?
私はさまざまなテストを行って、推定されたHeightForRowAtIndexPathが何をするのかの関係を判断しようとしました。最初は、高さの下限を提供するのではないかと考えました。したがって、150 .. 私の小さなセルでさえ、誤って 150 の高さになります。しかし、そうではありません。
私はそれがこのようなことをしているかもしれないと思います:あなたの推定されたHeightForRowAtIndexPath値が150であるとしましょう.行に150を使用している場合があります(実際には()がそのサイズ以下であることが証明されていますが、heightForRowAtIndexPathから実際のサイズになる場合もあります.
一方、推定された高さの値よりも小さい値を入れた場合 (私の例では 100 とします)、ほとんど「まったく機能しません」細胞。
非常に高いセルは正しく機能しているようです。おそらく、「heightForRowAtIndexPath からの高さが推定値の 2 倍の場合、実際の高さを使用します」のようなものです。
明確にするために、セルが小さすぎることはないようですが、セルが大きくなりすぎることがよくあります。
明確にするために、私は自動レイアウトを使用していません。これは、作成する必要があるセルのタイプです。(残念ながら、これが autolayout でどのように機能するかわかりません。) これは Xcode5/iOS7+ のみです。