LoginSignup
18
15

More than 5 years have passed since last update.

iOS8からのTableViewCellの高さ自動計算は、上スクロールした時にはうまく動かない件

Posted at

iOS8から、UITableViewAutomaticDimensionを使うと、高さ可変のCellの高さ計算を自動でやってくれるようです。
QiitaでのUITableViewAutomaticDimension検索

このUITableViewAutomaticDimensionは、Xcode6+iOS8.3シミュレータの組み合わせの場合、デフォルトでUITalbeViewnのrowHeight に設定されているようなので、試した所、estimatedRowHeightを設定するだけで反映するようでした。

self.tableView.estimatedRowHeight = 100;
//    self.tableView.rowHeight = UITableViewAutomaticDimension;  // ←これでも動くっちゃあ動く。

このUITableViewAutomaticDimension、下方向にスクロールする時には快調に動くのですが、いざ「上方向にデータを追加して上方向にスクロールする」場合には、セルが「上下に」「ガコガコと」動く現象があります。
やりたい動作としては、Twitterクライアントでリフレッシュした後に、上にスクロールしてツイートを見るのと同じような動作なのですが、これがUITableViewAutomaticDimensionを使うと「ガコガコ」と動きます。

scrollToUp.gif

ソース https://github.com/taktamur/iOS8CellHeight/tree/before

似た状況で似た悩みに遭遇している人もいます。
Autolayout で UITableViewCell の高さを設定すると reloadData 後にカクカクすることがある

おそらく(高さの計算を自動でしている限り)解決作はなさそう

ここから推測です。
セルを上方向に追加した場合、追加されたセルの「高さ」は、表示されていない(cellForRowAtIndexPathで呼ばれていない)ので、まだ確定していません。おそらくここはestimatedRowHeightの値で代用しているのだと思われます。
TableViewを上にスクロールして、追加されたセルが初めて表示される時、高さの計算が行われます。この高さとestimatedRowHeightの値がずれているために、表示された直後に「表示されている全てのセルの位置調整が行われ」るために、テーブル全体が「ガコっ」と動いてしまっているようです。

じゃあestimatedRowHeightの値を、実際の高さに合わせれば良いよね、となるのだけど、そうすると高さの自動計算がほぼ無意味になってしまいます。

上方向にセルをたす時は自動計算が使えない...

という結論は、ひじょーに悔しいので、良い解決策があったら ぜひ @paming まで連絡ください。。


18
15
1

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
18
15