如何获得UITableView的可见矩形?

时间:2011-07-21 14:21:35

标签: iphone objective-c cocoa-touch uitableview uiscrollview

我试图检测用户是否已滚动到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!");
    }      

}

5 个答案:

答案 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。这种方法更容易上手,它验证了应用中的“加载更多内容”功能。