iPhone SDK - 如何使用动画以编程方式滚动UITableView?

dan*_*dan 12 iphone animation scroll uitableview

如何使用动画将UITableView滚动到特定位置?

目前我正在使用此代码跳转到某个位置:

 //tableController -> viewDidLoad
 [self.tableView reloadData];
 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0];
 [self.tableView scrollToRowAtIndexPath:indexPath
                       atScrollPosition:UITableViewScrollPositionTop
                               animated:YES];
Run Code Online (Sandbox Code Playgroud)

这段代码的问题是,表格没有任何动画就会直接跳到正确的位置.有没有办法启用动画或设置持续时间?

谢谢你的帮助.

mxg*_*mxg 23

这对我来说可以:

-(void) viewDidAppear:(BOOL)animated{
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:n inSection:0];
    [self.tableView scrollToRowAtIndexPath:indexPath
                    atScrollPosition:UITableViewScrollPositionTop
                            animated:YES];

}
Run Code Online (Sandbox Code Playgroud)

为了确保只调用一次,您可以进行如下验证:

if(!isInitialized){
   isInitialized = YES;
   ....
}
Run Code Online (Sandbox Code Playgroud)


Fra*_*itt 5

尝试发表评论reloadData.如果我正确地理解了您的问题,并且您已经进入viewDidLoad,那么无论如何都不需要调用它.

此外,如果您刚刚完成推动视图控制器,您将无法获得动画滚动.你必须在viewDidLoad被调用的时间和动画开始之间插入延迟(我发现四分之一秒工作正常).


ric*_*chb 0

我有两个建议供您调查:

  1. 您的应用程序是在模拟器上运行还是在 iPhone 上运行?我注意到一些动画在模拟器中的行为有所不同。

  2. 您是否有可能连续快速调用两次scrollToRowAtIndexPath:atScrollPosition:animated?这可能会“混淆”动画。在处理给定事件时,您应该仅调用此函数一次。