質問: insertRowsAtIndexPathsでセルを追加した時にTwitterのタイムラインのようにスクロールさせたくないのですがinsertRowsAtIndexPathsの引数のanimationに.Noneを指定してもスクロールされてしまいます。 ご教授願いします。
回答: スクロールって言うと画面全体をイメージしてしまうのですが、ニュルっとスライドするやつのことですかね? ちょっと調べてみましたが、insertRowsAtIndexPathsの`withRowAnimation`は、セル内でのアニメーション設定のようで、セル自体のアニメーションを制御するわけでは無さそうです。 一日目 ==== ### 最初に思い付いたのは.. insert直後にリロードしてやれ、と。 ``` @IBOutlet weak var table: UITableView! //Storyboardと紐付け : let paths = [NSIndexPath(forRow: row, inSection: section)] table.insertRowsAtIndexPaths(paths, withRowAnimation: .None) //どうせキャンセルするので.NoneじゃなくてもOK table.reloadSections(NSIndexSet(index: section), withRowAnimation: .None) //ここは.Noneじゃないとダメ //table.reloadData() //面倒ならこれで ``` ### 真面目に調べてみたところ.. いいものが見つかりました。 ``` @IBOutlet weak var table: UITableView! //Storyboardと紐付け : let paths = [NSIndexPath(forRow: row, inSection: section)] UIView.performWithoutAnimation { self.table.insertRowsAtIndexPaths(paths, withRowAnimation: .None) //どうせキャンセルするので.NoneじゃなくてもOK } ``` バッチリです!(ただしiOS7以降) 二日目 ==== セル追加で下がる分だけ上げてみます。 ``` table.contentOffset.y += self.tableView(table, heightForRowAtIndexPath: indexPath) ``` insertRowsAtIndexPathsの後に追加して下さい。 reloadDataでは見た目がおかしくなるので、UIView.performWithoutAnimationの方でお願いします。 細かいことは気にしていないので気になるようなら、がんばって修正して下さい。 あと、複数セルを追加する場合はループ回してheightを計算して下さい。