投稿の経緯
TableViewスクロール時にセルの高さが低くなったり、高くなったりする不具合に遭遇しました。
AutoLayoutの制約は問題なさそうで、heightForRowAtでも固定値を返していたので改めて調査しました。
調査の中で、TableViewへの理解が高まり、スクロール時のパフォーマンスを高めて滑らかなUIを実現する方法に辿り着いたので記事にします。
対処法
結論、tableView(_:estimatedHeightForRowAt:)
を実装して、推定値を返すと改善できました。
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 100 // 推定値を設定する
}
heightForRowAt
とestimatedHeightForRowAt
を組み合わせて使用することで、TableViewのパフォーマンスを高めて滑らかなUIを実現することができます。
heightForRowAtとestimatedHeightForRowAtの違い
似たようなメソッドのtableView(_:heightForRowAt:)
との違いを説明します。
tableView(_:estimatedHeightForRowAt:)
セルの高さの推定値を返します。
このメソッドは、セルの実際の高さを計算する前に、推定値を用いてセルのスペースを確保し、スクロールの滑らかさを向上させることができます。
大量のセルが表示される場合やセルの高さが動的に変化する場合に使用するといいと思います。
tableView(_:heightForRowAt:)
セルの実際の高さを返します。
このメソッドをは、セルが表示されるたびに実際の高さを計算します。
estimatedHeightForRowAt
が実装されている場合でも、heightForRowAt
が優先され、実際の高さはこのメソッドで返される値に基づいて確定されます。