iOS8から、UITableViewAutomaticDimensionを使うと、高さ可変のCellの高さ計算を自動でやってくれるようです。
QiitaでのUITableViewAutomaticDimension検索
このUITableViewAutomaticDimensionは、Xcode6+iOS8.3シミュレータの組み合わせの場合、デフォルトでUITalbeViewnのrowHeight に設定されているようなので、試した所、estimatedRowHeightを設定するだけで反映するようでした。
self.tableView.estimatedRowHeight = 100;
// self.tableView.rowHeight = UITableViewAutomaticDimension; // ←これでも動くっちゃあ動く。
このUITableViewAutomaticDimension、下方向にスクロールする時には快調に動くのですが、いざ「上方向にデータを追加して上方向にスクロールする」場合には、セルが「上下に」「ガコガコと」動く現象があります。
やりたい動作としては、Twitterクライアントでリフレッシュした後に、上にスクロールしてツイートを見るのと同じような動作なのですが、これがUITableViewAutomaticDimensionを使うと「ガコガコ」と動きます。
ソース https://github.com/taktamur/iOS8CellHeight/tree/before
似た状況で似た悩みに遭遇している人もいます。
Autolayout で UITableViewCell の高さを設定すると reloadData 後にカクカクすることがある
おそらく(高さの計算を自動でしている限り)解決作はなさそう
ここから推測です。
セルを上方向に追加した場合、追加されたセルの「高さ」は、表示されていない(cellForRowAtIndexPathで呼ばれていない)ので、まだ確定していません。おそらくここはestimatedRowHeightの値で代用しているのだと思われます。
TableViewを上にスクロールして、追加されたセルが初めて表示される時、高さの計算が行われます。この高さとestimatedRowHeightの値がずれているために、表示された直後に「表示されている全てのセルの位置調整が行われ」るために、テーブル全体が「ガコっ」と動いてしまっているようです。
じゃあestimatedRowHeightの値を、実際の高さに合わせれば良いよね、となるのだけど、そうすると高さの自動計算がほぼ無意味になってしまいます。
上方向にセルをたす時は自動計算が使えない...
という結論は、ひじょーに悔しいので、良い解決策があったら ぜひ @paming まで連絡ください。。