我有一个 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
,它会完美运行。怎么会这样?以及如何使用动画使其工作?