我有一个表视图,很多情况下只有一个或两个单元格没有填满屏幕。在这种情况下,我希望细胞位于底部,而不是顶部。换句话说,他们应该“捕捉”到桌面视图的底部。
我可以强制表视图将它们滚动到底部,如下所示:
CGPoint bottomOffset = CGPointMake(0, [self.tableView contentSize].height - self.tableView.frame.size.height);
[self.tableView setContentOffset:bottomOffset animated:NO];
然而,这只是部分成功。首先,如果我将它放在viewDidLoad或viewWillAppear中,只有在viewDidAppear中才会起作用,这意味着用户首先看到顶部有单元格的tableview,然后它们会移到底部。其次,如果他们滚动表视图,当他们放开时,它会自动“捕捉”回到顶部。
有谁知道如何改变这种行为?
答案 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];
此示例假设您的表有一个部分,每行的高度相同。如果涉及多个部分或者不同的行可能是不同的高度,则计算大小将变得更复杂。
无论高度如何计算,这个想法的本质是让表本身更短,不高于它所显示的一两行,而不是试图强迫它表现不同。