我想創建一個UITableView的日期,應該不是很令人興奮,我知道。它從當前日期開始,但用戶應該能夠向下滾動(未來)以上(過去)儘可能遠。這會導致可能的無限數量的行。那麼創建這個有什麼辦法呢?永恆滾動UITableView
返回NSIntegerMax
作爲行數已經崩潰的應用程序,但即使它不會,這仍然不能考慮能夠滾動。我當然可以開始,但最終會有一個最大值。
任何想法如何做或假這?我可以更新/重新加載表格,而不需要用戶注意,所以我從來沒有碰到邊界?
SOLUTION:
我去@安德的建議,並與細胞的固定量做了一桌。但當用戶滾動到固定單元格的邊緣附近時,我不用重新加載它,而是在滾動停止時重新加載表格。爲了適應用戶在不停止的情況下滾動很長的距離,我只是將行數增加到了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];
}
}
魔符當用戶滾動表中的邊緣沒有停止,但與表視圖bounces
屬性禁用,這只是感覺就像一個小故障,但完全可以接受的。一如既往,感謝StackOverflow!
請在下面我的答案中試用一下代碼。它使用一個簡單的邏輯。 –