我是一个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行吗?
谢谢!
答案 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;