ご回答いただいている方々、いつもお世話になっております。
UITableViewを使用して、チャットアプリを開発しています。
実現したいこと
・トーク画面が表示される度に一番下のcellを表示させたい
・その後、tableViewを上にスワイプしても正常にスワイプされるようにしたい
・新しいcellが生成される度に一番下のcellを表示させたい
今は、
画面が表示された際に一番最後のセルを表示させるために、
cellForRowAt内で、
self.tableView.setContentOffset(CGPoint(x: 0, y: self.tableView.contentSize.height - self.tableView.frame.size.height), animated: false);
と記述しました。
そうすると、最後のセルが表示されるようにはなったのですが、
画面外に出た上のセルを表示させるためにtableViewをスワイプしても、
その度にsetContentOffsetが呼ばれているせいなのか、常に一番下に固定されてしまいます。
cellForRowAt内でsetContentOffsetを呼んでいること自体が間違っている気がするのですが、
どこで呼び出すのが正しいのでしょうか。
また、一番最後のcellまでスクロールさせる方法や、
新しいcellの生成を判定する方法などございましたら、ご教示ください。
宜しくお願い致します。
「トーク画面が表示される度に」とおっしゃられているので、そのタイミングがコード上のどこなのかを調べてみてはいかがでしょうか?
t_obara様 質問をお読み頂き有難うございます。トーク画面が表示されるタイミング(例えばviewdidlayoutsubviewsやviewdidappear等)で、setContentOffsetを呼ぶと、tableViewのレイアウト処理が終わっていないのか、cellが完全に生成されていないのか、不明ですが、クラッシュしてしまいます。なので、cellが生成されたタイミングを判定できればなと思っておりました。
コードがない以上想像でしかコメント出来ないですが、多分何らかの配列でcellの中身を管理してるわけですよね。なのでその配列にelementをappendした後にでもスクロールさせればいいんじゃないです?
あなたの回答
tips
プレビュー