1

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

4

1 回答 1

0

在调用方法时尝试等待直到完成……另一种可能性是在动画块中集成动画:无功能……</p>

像这样的东西:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];

[self.wordsTableView scrollToRowAtIndexPath: ipath 
                                       atScrollPosition:UITableViewScrollPositionBottom 
                                               animated:NO];

[UIView commitAnimations];

这并不是最好的解决方案,但也许会有所帮助……</p>

于 2012-09-19T09:39:20.033 回答