我试图检测用户是否已滚动到UITableView的底部,以便我可以做一些额外的事情。为了正确计算事物,我需要获得UITableView的可见rect。我怎样才能做到这一点?
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
[_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];
int currentMaxPosition = CGRectGetMaxY([self.tableView visibleRect]);
int currentMinPosition = CGRectGetMinY([self.tableView visibleRect]);
int tableViewBottom = [self.tableView bounds].size.height - 100;
int tableViewTop = 0;
//get older messages once we're near the bottom
if (currentMaxPosition > tableViewBottom - 100)
{
NSLog(@"WE AT THE BOTTOM!");
}
}
答案 0 :(得分:22)
UITableView只是一个UIScrollView子类,因此所有常用的UIScrollView方法都适用,例如: UITableView的可见rect就是它的界限:
CGRect visibleRect = [myTableView bounds];
visibleRect的来源只是contentOffset,因此您可以使用的另一种方法是:
CGFloat distanceFromBottom = [self.tableView contentSize].height - [self.tableView contentOffset].y;
答案 1 :(得分:3)
您可以签入[tableView visibleCells]
以获取可见的单元格或tableView indexPathsForVisibleRows]
,并确定用户是否滚动到底部。
答案 2 :(得分:2)
当我点击一个单元格时,我试图显示一个图像,我想找到要显示它的框架(获取tableview的当前位置)。
我使用了以下内容并且有效:
//originalImageViewFrame is the CGRect that I use for my new view that I want to add to the view.
originalImageViewFrame.origin = CGPointZero;
originalImageViewFrame.size = self.tableView.contentSize;
希望它有所帮助。
答案 3 :(得分:0)
-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
int i=0;
i=indexPath.row;
int count=[urTablearray count];
if (count == (++i)) {
//do ur stuff here
}
}
答案 4 :(得分:0)
如果您想要在到达底部时加载更多单元格,请尝试post。
基本上你知道表视图中当前有多少行,有多少部分等,使用:
- (NSInteger)numberOfSections
- (NSInteger)numberOfRowsInSection:(NSInteger)section
你也可以使用:
- (NSArray *)indexPathsForVisibleRows
找出靠近底部的单元格的索引路径。
然后使用以下UITableViewDelegate方法:
- (void)tableView:(UITableView *)tableView
willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
并使用indexPath
值并将其与底部索引的“近”值进行比较。如果靠近底部,请执行一些操作,例如加载更多内容。
某些应用有一个专用的“加载更多...”单元格到manually load additional content。这种方法更容易上手,它验证了应用中的“加载更多内容”功能。