2010-07-09 198 views
0

我不得不把的UITableView初始滚动位置设定为比第一个(例如,第二部分的第一行)以外的行。奇怪的行为:

在我的视图控制器的viewDidLoad中我写:

- (void)viewDidLoad 
{ 
    // self.view is a container view, not UITableView 
    [super viewDidLoad]; 
    [table scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] 
     atScrollPosition:UITableViewScrollPositionTop animated:NO]; 
} 

当屏幕上的负荷,滚动位置立即设置。否则,当动画参数设置为YES时,立即设置该位置而不使用任何动画。 发生了什么事?

什么是正确的方式来设置UITableView的初始行位置?

回答

0

最好的地方应该是ViewDidAppear。此外,你应该调用cellWillDisplay中的滚动方法来确保。记得在调用滚动方法之前检查indexPath

0

只是在黑暗中拍摄,但你有没有试图把这个代码放到viewDidAppear {}?

+0

完全一样的结果。 – alexey 2010-07-09 20:47:25

0

因为表很可能还没有被那么填充这不会在viewDidLoadviewWillAppear工作(至少它是不是在我的情况)

尝试把它在一个NSTimer一次,而不是你的表然后加载并调用它。另外,我很快将这个代码(带有动画)放入一个导航栏按钮项中,并且在表完成加载后它工作得非常好。

+0

即使在viewDidLoad中,滚动也可以工作,但它不会立即滚动。 NSTimer对我来说是一种破解。是否有任何回调的表确实加载事件? – alexey 2010-07-09 20:58:09

+0

正确,它将不会滚动,直到数据存在滚动到。在有大量tableview数据或图像的项目中,它可能需要2秒或更长时间,然后'viewDidLoad'已被调用。不幸的是,当表加载完成时,“UITableViewDelegate”方法中没有任何内容。您可能会在这里找到更多信息:http://stackoverflow.com/questions/1483581/get-notified-when-uitableview-has-finished-asking-for-data – iwasrobbed 2010-07-09 21:10:39