我试着用日期创建一个合适的视图,应该不是很令人兴奋,我知道。它从当前日期开始,但是用户应该可以根据自己的需要向下(未来)和向上(过去)滚动。这将导致潜在的无限行数。那么,如何创造这个呢?
返回“cc>”,因为行的数量已经崩溃了应用程序,但即使它不会,这仍然不能解释是否能够向上滚动。当然,我可以从一半开始,但最终会有一个最大值。
你知道怎么做还是假装?我可以在用户不注意的情况下更新/重新加载表,这样就不会遇到边界吗?
解决方案:
我同意了@ender的建议,做了一张有固定数量牢房的桌子。但是,当用户滚动到固定单元格的边缘时,我没有重新加载它,而是在滚动逐渐停止时重新加载表。为了适应用户不停地滚动很远的距离,我将行数增加到1000,将row_center常量设置为500。这是负责更新行的方法。
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
NSArray *visible = [self.tableView indexPathsForVisibleRows];
NSIndexPath *upper = [visible objectAtIndex:0];
NSIndexPath *lower = [visible lastObject];
// adjust the table to compensate for the up- or downward scrolling
NSInteger upperDiff = ROW_CENTER - upper.row;
NSInteger lowerDiff = lower.row - ROW_CENTER;
// the greater difference marks the direction we need to compensate
NSInteger magnitude = (lowerDiff > upperDiff) ? lowerDiff : -upperDiff;
self.offset += magnitude;
CGFloat height = [self tableView:self.tableView heightForRowAtIndexPath:lower];
CGPoint current = self.tableView.contentOffset;
current.y -= magnitude * height;
[self.tableView setContentOffset:current animated:NO];
NSIndexPath *selection = [self.tableView indexPathForSelectedRow];
[self.tableView reloadData];
if (selection)
{
// reselect a prior selected cell after the reload.
selection = [NSIndexPath indexPathForRow:selection.row - magnitude inSection:selection.section];
[self.tableView selectRowAtIndexPath:selection animated:NO scrollPosition:UITableViewScrollPositionNone];
}
}
当用户不停地滚动到表的边缘时,魔术就破灭了,但是在禁用table view
NSIntegerMax
属性的情况下,这仅仅是一个小故障,但完全可以接受。一如既往,谢谢StackOverflow! 最佳答案
当用户在tableview的末尾滚动时,应该建立固定数量的单元格并调整数据源。例如,您有一个包含51个日期(今天、25个未来和25个过去)的数组。当应用程序试图在某个边界附近呈现单元格时,请重新配置数组并调用reloadData