关于TableVIew的上下滚动如何探测其边界

UITableView is a subclass of UIScrollView, and UITableViewDelegate conforms to UIScrollViewDelegate. So the delegate you attach to the table view will get events such as scrollViewDidScroll:, and you can call methods such as contentOffset on the table view to find the scroll position.

 

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{   
    CGFloat height = scrollView.frame.size.height;

    CGFloat contentYoffset = scrollView.contentOffset.y;

    CGFloat distanceFromBottom = scrollView.contentSize.height - contentYoffset;

    if(distanceFromBottom < height) 
    {
        NSLog(@"end of the table");
    }
}

 

 

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView {
    CGPoint offset = aScrollView.contentOffset;
    CGRect bounds = aScrollView.bounds;
    CGSize size = aScrollView.contentSize;
    UIEdgeInsets inset = aScrollView.contentInset;
    float y = offset.y + bounds.size.height - inset.bottom;
    float h = size.height;
    // NSLog(@"offset: %f", offset.y);   
    // NSLog(@"content.height: %f", size.height);   
    // NSLog(@"bounds.height: %f", bounds.size.height);   
    // NSLog(@"inset.top: %f", inset.top);   
    // NSLog(@"inset.bottom: %f", inset.bottom);   
    // NSLog(@"pos: %f of %f", y, h);

    float reload_distance = 10;
    if(y > h + reload_distance) {
        NSLog(@"load more rows");
    }
}

 

上述代码可以添加到tableViewDelegate的类当中~

 

下面是我自己实现的代码,这样按钮滚动不过超过tableview的范围了

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    CGFloat height = scrollView.frame.size.height;
    
    CGFloat contentYoffset = scrollView.contentOffset.y;
    
    CGFloat distanceFromBottom = scrollView.contentSize.height - contentYoffset;
    
    if(distanceFromBottom < height)
    {
//        NSLog(@"end of the table");
        CGFloat realOffsetY = scrollView.contentSize.height - height;
        [scrollView setContentOffset:CGPointMake(0, realOffsetY)];

    }else if(contentYoffset < 0){
//        NSLog(@"out of the table head");
//        scrollView.scrollsToTop = YES;
        [scrollView setContentOffset:CGPointMake(0, 0)];
    }
}

#pragma mark - button action
- (IBAction)upperButtonClick:(id)sender {
    NSLog(@"Upper Button was Clicked");
    CGPoint contentOffset = self.tableView.contentOffset;
    contentOffset.y -= OFFSET_VALUE; // Adjust this value as you need
    [self.tableView setContentOffset:contentOffset animated:YES];
}

- (IBAction)downButtonClick:(id)sender {
    NSLog(@"Down Button was Clicked");
    CGPoint contentOffset = self.tableView.contentOffset;
    contentOffset.y += OFFSET_VALUE; // Adjust this value as you need
    [self.tableView setContentOffset:contentOffset animated:YES];
}

 

posted on 2014-10-14 11:01  SCaptain  阅读(647)  评论(0编辑  收藏  举报

导航