TableViewcellで注意すること | TokoTokoSoftware

TokoTokoSoftware

iPhone / iPadアプリを作っている団体「トコトコ」です
大学生二人でMacBookつかって頑張ってます!!

いわゆる技術メモ というかつぶやきレベルのことですが、

tableViewで、TwitterのTLのように それぞれのセルの高さが違う場合
それぞれの高さは cellheightメソッドの返り値として返しますが。
その時に注意することが。
「セルの生成より セルの高さのほうが先に聞かれる」
ということです。
つまりcellforrowatindexpath
よりcellheightのほうが先に呼ばれます。
どういう問題があるかというと、
「先にセルを生成するより先に そのセルの高さを聞かれる」
ということです。

なので、「セルを生成したときに 高さ情報をどっかに記録して cellheightで返せばいいや」
は通用しないわけです。
cellheight呼ばれたときにはまだ生成されてないわけですから。

なので、高さがそれぞれ違うTableViewを出すときは
1,表示するセルの高さを取得しておく(Cellを1つ生成して それぞれの内容を当てはめてみて高さを取得しておく)
2,そしてcellheightでは あらかじめ調べた高さを返す。
3,セルの生成は普通に

という手順が必要になります。
ちなみにcellheightよばれたときに tableview cellforrowatindexを呼び出してセルを生成させて高さを得る
方法もありますが、
これは高さを調べるたびに無駄にセルを生成するので遅くなります。
特にセルをアニメーションで挿入する場合、極端に遅くなります。
なので、上記の手順が必要です。