5
1

[Swift]TableViewスクロール時のパフォーマンスを高めて滑らかなUIを実現する

Last updated at Posted at 2023-12-12

投稿の経緯

TableViewスクロール時にセルの高さが低くなったり、高くなったりする不具合に遭遇しました。
AutoLayoutの制約は問題なさそうで、heightForRowAtでも固定値を返していたので改めて調査しました。

調査の中で、TableViewへの理解が高まり、スクロール時のパフォーマンスを高めて滑らかなUIを実現する方法に辿り着いたので記事にします。

対処法

結論、tableView(_:estimatedHeightForRowAt:)を実装して、推定値を返すと改善できました。

.swift
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return 100 // 推定値を設定する
}

heightForRowAtestimatedHeightForRowAtを組み合わせて使用することで、TableViewのパフォーマンスを高めて滑らかなUIを実現することができます。

heightForRowAtとestimatedHeightForRowAtの違い

似たようなメソッドのtableView(_:heightForRowAt:)との違いを説明します。

tableView(_:estimatedHeightForRowAt:)

セルの高さの推定値を返します。

このメソッドは、セルの実際の高さを計算する前に、推定値を用いてセルのスペースを確保し、スクロールの滑らかさを向上させることができます。

大量のセルが表示される場合やセルの高さが動的に変化する場合に使用するといいと思います。

tableView(_:heightForRowAt:)

セルの実際の高さを返します。

このメソッドをは、セルが表示されるたびに実際の高さを計算します。
estimatedHeightForRowAtが実装されている場合でも、heightForRowAtが優先され、実際の高さはこのメソッドで返される値に基づいて確定されます。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1