2015.4.25

Self Sizing Cells 選択時にセルの位置がずれてしまう問題を解決

問題

iOS8からはtableViewのセルの高さを動的に計算できるようになった。使ってみるとひとつ問題が発生。セルを選択して次画面にナビゲーション遷移する場合、選択直後にセルの位置がずれてしまう。

####

原因

セル選択時にestimatedHeightForRowIndexPathが呼ばれて、セルの高さが一斉にデフォルト値に調整されているっぽい。なぜかは分からない。

####

解決策

セルの表示タイミングで実際のセルサイズをキャッシュして、estimatedHeightForRowIndexPathでその値を返すようにすることで対処できた。

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    // セルが表示されるタイミングで高さをキャッシュ
    self.cache?[indexPath.row] = cell.frame.size.height
}

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if let height = self.cache?[indexPath.row] {
   return height
    }
    return defaultHeight
}
TAKERU
YOSHIHARA
ゴーシュは町の活動写真館でセロを弾く係りでした。けれどもあんまり上手でないという評判でした。ゴーシュは町の活動写真館でセロを弾く係りでした。上手でないどころではなく実は仲間のゴーシュは町の活動写真館でセロを弾く係りでした。上手でないどころではなく実は仲間の…