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

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

问题描述:

我有一个表格视图,这是许多情况下将只有一个或两个单元格不填充屏幕。在这种情况下,我希望细胞坐在底部,而不是顶部。换句话说,他们应该“捕捉”到tableview的底部。获取UITableView从底部/捕捉到底部滚动,而不是顶部

我可以强制表视图,以他们滚动到这样的底部:

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

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

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

要考虑的一个选择是根据要显示的行数调整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]; 

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

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