为什么我的UITableView没有滚动到正确的索引行?

时间:2011-03-26 23:39:06

标签: iphone cocoa-touch uitableview ios4 uiscrollview

我是一个UITableView设置并加载了大约3条记录。 Interface Builder中UITableView的高度仅为44像素。每行的高度设置为44像素。

这意味着一次只能看到一行,但可以拖动并滚动到新行。我希望UITableView总是显示滚动到最可见的行。

我已设置以下代码:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    // Get the center of the UITableView bounds     
    CGPoint tableViewCenter = self.activeTableView.center;
    // Get the row that is currently occupying the center point in the UITableView  
    NSIndexPath *row = [self.activeTableView indexPathForRowAtPoint:CGPointMake(tableViewCenter.x, tableViewCenter.y)];
    // Animate and scroll to this row making it the only visible row.   
    [self.activeTableView scrollToRowAtIndexPath:row atScrollPosition:UITableViewScrollPositionTop animated:YES];
}

我的问题是无论我做什么,总是滚动回到第一行记录。我可以一直拖到第3排然后放开,它会一直滚动到第一个记录?如果我放开后它是最可见的行,它不应该滚动并居中第3行吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您的问题是滚动时tableView.center不会更改。如果您更改了tableview的框架,则仅更改中心。

您应该使用的是UIScrollView的contentOffset。

用这个替换你的tableViewCenter代码,它应该可以工作

CGPoint tableViewCenter = scrollView.contentOffset;
// contentOffset is the position of the first visible pixel in the upper left corner 
// add half the height so the relevant point is in the middle of the tableView
tableViewCenter.y += self. activeTableView.frame.size.height/2;