プログラムの実行中に動的に新しい行を追加するUITableViewがあります。私は常に新しい行を一番下に追加します。その場合、テーブルビューを一番下までスクロールして、新しい行を表示します。
NSInteger oldCount = [self.game count];
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
//This may take a long time
BOOL gameStateChanged = [self.game update] ;
dispatch_async( dispatch_get_main_queue(), ^{
if (gameStateChanged)
{
NSMutableArray* ipaths = [NSMutableArray arrayWithCapacity:5];
NSInteger newCount = [self.game count];
for (NSInteger i = oldCount; i < newCount; i++)
{
[ipaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];
}
NSIndexPath* ipath = [ipaths lastObject];
[self.wordsTableView insertRowsAtIndexPaths:ipaths
withRowAnimation:UITableViewRowAnimationNone];
[self.wordsTableView scrollToRowAtIndexPath: ipath
atScrollPosition:UITableViewScrollPositionBottom
animated:YES];
}
});
});
問題は、時々スクロールを停止することです。スクロールを停止した後、ユーザーがテーブルビューを手動でスクロールしない限り、同じメソッドへの後続の呼び出しで自動的にスクロールを開始しません。
スクロール、送信のアニメーションをオフにすると、animated:NO
完全に機能します。どうすればいいの?そして、どうすればアニメーションを使用してそれを機能させることができますか?