私が使用するコードは次のとおりです。
//inserting a row at the bottom first
_numberOfRecords++;
[_tableView beginUpdates];
[_tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:_numberOfRecords-1 inSection:0]] withRowAnimation:UITableViewRowAnimationBottom];
[_tableView endUpdates];
//clear text
_inputField.text = @"";
//then scroll to bottom
CGPoint bottomOffset = CGPointMake(0, _tableView.contentSize.height + 44.0 + _tableView.contentInset.top - _tableView.bounds.size.height);
NSLog(@"%f", _tableView.contentSize.height + 44.0 + _tableView.contentInset.top - _tableView.bounds.size.height);
[_tableView setContentOffset:bottomOffset animated:YES];
これにより、テーブルビューが非常に奇妙な方法でスクロールされます。しかし、挿入の前にスクロールコードを配置すると、最後に挿入された行を無視することを除いて正常に動作します。つまり、最後の行までスクロールするのではなく、最後から 2 番目の行までスクロールします (もちろん、新しいロールを挿入する前にスクロールするためです)。
したがって、このコードには、スクロールする位置の問題はないと思います。問題はおそらく、テーブルビューへの行の挿入から来ています。テーブル ビューのスクロールのアニメーションに違反しています。
チャットビューを作成するためにこれを行っています。ユーザーがメッセージを送受信するたびに、メッセージを含む行をテーブル ビューに挿入し、一番下までスクロールします。そのため、ここでは tableView を使用します。ラベル付きのscrollViewを使用しようとしましたが、正常に動作しますが、チャットビューではtableViewの方が人気があるようです。
scrollViewかtableViewを使おうと思っていたら、Appleの組み込みメッセージアプリがtableViewを使っていることがわかったので、tableViewを採用。Label 付きの scrollView が tableView より優れているかどうか教えてください。
とにかく、新しい行を挿入した後、tableView を一番下までスクロールするにはどうすればよいですか?