获取UITableView从底部/捕捉向上滚动到底部,而不是顶部

时间:2010-01-11 05:07:10

标签: iphone uitableview scroll

我有一个表视图,很多情况下只有一个或两个单元格没有填满屏幕。在这种情况下,我希望细胞位于底部,而不是顶部。换句话说,他们应该“捕捉”到桌面视图的底部。

我可以强制表视图将它们滚动到底部,如下所示:

  CGPoint bottomOffset = CGPointMake(0, [self.tableView contentSize].height - self.tableView.frame.size.height);
  [self.tableView setContentOffset:bottomOffset animated:NO];

然而,这只是部分成功。首先,如果我将它放在viewDidLoad或viewWillAppear中,只有在viewDidAppear中才会起作用,这意味着用户首先看到顶部有单元格的tableview,然后它们会移到底部。其次,如果他们滚动表视图,当他们放开时,它会自动“捕捉”回到顶部。

有谁知道如何改变这种行为?

1 个答案:

答案 0 :(得分:4)

要考虑的一个选项是根据要显示的行数来调整UITableView本身的大小。假设您的UITableViewDelegate实现了heightForRowAtIndexPath,则可以通过将行数乘以每行的高度来设置viewWillAppear方法中UITableView的高度。

这样的事情:

CGRect frame = [myTableView frame];

frame.size.height = [[myTableView dataSource] tableView: myTableView numberOfRowsInSection: 0] *
                    [[myTableView delegate] tableView: myTableView heightForRowAtIndexPath: [NSIndexPath indexPathForRow: 0 inSection: 0]];

[myTableView setFrame: frame];

此示例假设您的表有一个部分,每行的高度相同。如果涉及多个部分或者不同的行可能是不同的高度,则计算大小将变得更复杂。

无论高度如何计算,这个想法的本质是让表本身更短,不高于它所显示的一两行,而不是试图强迫它表现不同。